Cet article n’a pas pour objectif de traiter tous les caractères qui sont interprétés comme une instruction de langage dans un pipeline sous Jenkins, mais de donner une solution pour utiliser des caractères comme des backslashs (\) ou des dollars ($) dans une chaine de caractères ou dans un script sh ou batch.
Il arrive parfois qu’on ait besoin d’usiliser un backslash (\) ou un dollar ($), par exemple dans une expression régulière. Sans le caractère d’échappement un backslash indique un début d’instruction (par exemple \t pour une tabulation) et un dollar une variable.
Ainsi sous Jenkins pour initialiser une variable String avec ceci : ^[-+]?[0-9]*\.?[0-9]+$, il faudra ajouter le caractère d’échappement backslash devant le \ et le $.
1) Double quotes
Ce qui donnera
def version_regex = “^[-+]?[0-9]*\\.?[0-9]+\$”;
2) Simple quotes
On peut également utiliser les simples quotes pour le $:
def version_regex = ‘^[-+]?[0-9]*\\.?[0-9]+$’;
A savoir que le backslash est toujours “échappé” car dans ce cas-ci cette expression régulière sera utilisée dans un script shell. Sans quoi Jenkins pourrait interpréter le point (.) comme une instruction.
Je conseille vivement l’utilisation des doubles quotes et du caractère d’échappement ceci pour avoir une homogénéïté dans l’écriture des caractères et instructions, mais aussi pour pouvoir utiliser des variables pour construire une variable.
Par exemple:
def part1 = “[0-9]”;
def version_regex = “^[-+]?[0-9]*\\.?$part1+\$”;
En l’absence de ce caractère backslash Jenkins nous retournera deux erreurs:
1: Unexpected char \
2: Illegal string body character after dollar sign;
solution: either escape a literal dollar sign “\$5” or bracket the value expression “${5}”