はじめに
Jenkinsのパイプラインの「$xxx」をsedコマンドで変換します。
成功パターン
$の前に「\」バックスラッシュをつけ「'」シングルクォーテーションで囲む
sh "sed -i 's/\$xxx/AAA/g' test.txt"
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"
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
[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'
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
[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"
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