はじめに
Jenkinsのパイプラインの「$xxx」をsedコマンドで変換します。
成功パターン
$の前に「\」バックスラッシュをつけ「'」シングルクォーテーションで囲む
sh "sed -i 's/\$xxx/AAA/g' test.txt"
- Jenkinsfile
pipeline { agent any stages { stage('sed') { steps { sh "echo '\$xxx' > ./test.txt" sh "cat test.txt" sh "sed -i 's/\$xxx/AAA/g' test.txt" sh "cat test.txt" } } stage('delete_ws') { steps { cleanWs() } } } }
- 実行ログ
Started by user user [Pipeline] Start of Pipeline [Pipeline] node Running on node in /home/ec2-user/workspace/test_job [Pipeline] { [Pipeline] stage [Pipeline] { (sed) [Pipeline] sh + echo '$xxx' [Pipeline] sh + cat test.txt $xxx [Pipeline] sh + sed -i 's/$xxx/AAA/g' test.txt [Pipeline] sh + cat test.txt AAA [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (delete_ws) [Pipeline] cleanWs [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] done [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
失敗パターン
$の前に「\」をつけるのみ
sh "sed -i s/\$xxx/AAA/g test.txt"
- Jenkinsfile
pipeline { agent any stages { stage('sed') { steps { sh "echo '\$xxx' > ./test.txt" sh "cat test.txt" sh "sed -i s/\$xxx/AAA/g test.txt" sh "cat test.txt" } } stage('delete_ws') { steps { cleanWs() } } } }
- 実行ログ
- $xxxを変数として扱い、それが未設定であり初回実行でもあるため、エラーになります。
- 「\」を付けない場合でも、同様にエラーとなります。
Started by user user [Pipeline] Start of Pipeline [Pipeline] node Running on node in /home/ec2-user/workspace/test_job [Pipeline] { [Pipeline] stage [Pipeline] { (sed) [Pipeline] sh + echo '$xxx' [Pipeline] sh + cat test.txt $xxx [Pipeline] sh + sed -i s//AAA/g test.txt sed: -e expression #1, char 0: no previous regular expression [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (delete_ws) Stage "delete_ws" skipped due to earlier failure(s) [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline ERROR: script returned exit code 1 Finished: FAILURE
$の前に「\」をつけ、引数は「"」で、全体は「'」で囲む
sh 'sed -i "s/\$xxx/AAA/g" test.txt'
- Jenkinsfile
pipeline { agent any stages { stage('sed') { steps { sh "echo '\$xxx' > ./test.txt" sh "cat test.txt" sh 'sed -i "s/\$xxx/AAA/g" test.txt' sh "cat test.txt" } } stage('delete_ws') { steps { cleanWs() } } } }
- 実行ログ
- $xxxを変数として扱い、それが未設定であり初回実行でもあるため、エラーになります
Started by user user [Pipeline] Start of Pipeline [Pipeline] node Running on node in /home/ec2-user/workspace/test_job [Pipeline] { [Pipeline] stage [Pipeline] { (sed) [Pipeline] sh + echo '$xxx' [Pipeline] sh + cat test.txt $xxx [Pipeline] sh + sed -i s//AAA/g test.txt sed: -e expression #1, char 0: no previous regular expression [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (delete_ws) Stage "delete_ws" skipped due to earlier failure(s) [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline ERROR: script returned exit code 1 Finished: FAILURE
$の前に「\」をつけ、引数は「"」で、全体も「"」で囲む
sh "sed -i "s/\$xxx/AAA/g" test.txt"
- Jenkinsfile
pipeline { agent any stages { stage('sed') { steps { sh "echo '\$xxx' > ./test.txt" sh "cat test.txt" sh "sed -i "s/\$xxx/AAA/g" test.txt" sh "cat test.txt" } } stage('delete_ws') { steps { cleanWs() } } } }
- 実行ログ
- 構文エラーになります。
- 「'」に置き換えても、全体を囲まない場合でも、構文エラーになります。
Started by user user org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 9: expecting '}', found 's' @ line 9, column 29. sh "sed -i "s/\$xxx/AAA/g" test.txt" ^ 1 error Finished: FAILURE