2017-12-29 28 views
1

Ich mache eine einfache Substitution, und das funktioniert in der Befehlszeile fein:Wie diesen Befehl sed in einer Jenkinsfile-Pipeline zu entkommen?

sed "s/pub Url =.*/pub Url = 'https:\/\/example.com:3207';/g" myfile.ts 

Ich versuche es innerhalb eines Jenkinsfile zu laufen, und wie 40 baut später kann ich die Flucht bekommen zitiert Recht.

Ziemlich sicher, dass es so etwas wie folgt aussehen:

sh 'sed \\"s/pub Url =.*/pub Url = \\'https:\\\/\\\/example.com:3207\\';/g\\" myfile.ts'

Doch dass die Ergebnisse in der folgenden Fehler:

WorkflowScript: 4: unexpected char: '\' @ line 4, column 49. ub Url =.*/pub Url = \\'https:\\\/\\\/ex

Ich fühle mich wie ich versucht habe, Dutzende von Varianten, aber nichts funktioniert.

ist hier zu den häufigsten Fehler, die ich bin immer: das Problem zu entkommen Punkte

sed: -e expression #1, char 1: unknown command: `"'

ich wirklich nur eine Pipeline-Experte müssen, die genau wahrscheinlich sehen können, was ich falsch gemacht und wissen, wo sie zitieren Sie es.

Wie hier angemerkt: https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4 Dies ist nicht ungewöhnlich, um diese Art von Zeug in den Pipeline-Dateien zu kämpfen und es scheint, es ist nur Versuch und Irrtum.

+0

Könnten Sie die erste 'sed', die in einem Shell-Skript funktioniert, und dann aus der Jenkins-Datei ausführen? Ihr zweites Beispiel grenzt an unlesbar, so dass Sie sich selbst einen Gefallen tun können, wenn Sie sich von all dem entkommen lassen ... ':-)' – halfer

+0

Wenn Sie es aus der Jenkinsfile tun müssen, erhalten Sie den angegebenen Fehler mit dem Probe, die du zur Verfügung gestellt hast? Die Frage ist etwas vage, da Sie sagen, Sie haben "so etwas" und "Dutzende von Varianten" ausprobiert, und es ist nicht klar, ob das Beispiel hier den Fehler erzeugt. – halfer

+0

Ich habe die Frage bearbeitet. Ich denke jedoch, dass ich einer Lösung nahekomme, indem ich den sed-Befehl vereinfache und langsam aufbaue. – emmdee

Antwort

0

Ok nach viel Versuch und Irrtum, das funktioniert.

Sieht so aus, als hätte ich dreifache einfache Anführungszeichen um den Befehl verwenden müssen. Gut, dass ich nicht interpolieren muss!

sh '''sed \"s/pub Url =.*/pub Url = \\'https:\\/\\/example.com:3207\\';/g\" afile.txt'''

Hoffe, das ist hilfreich, jemand in der Zukunft, die diese kämpfen wird!

+0

Sie reduziert auch die Back-Schrägstriche im HTTPS-Schema auf zwei (von drei), die ich erwähnen würde. –