Jenkinsのパイプラインを試してみた。
結果、下記の点がクリアできなかったため、実際の採用は見送ることにしたが、新たに追加されたpipelineビューはタスクの中のステージごとに進捗状況や要した時間が見れるため、魅力的な点もある。また、freestyleでかかれた他のタスクを呼び出すこともできるので、freestyleとpipelineを組み合わせて使うことも可能であることが分かった。
ここでは、調査の際にわかった使えそうなコマンドを備忘録として残しておく。
ちなみに、採用を見送ったのは下記の理由から。(これらが解決すれば、再度採用を検討したい)
- workspaceがタスクから見えなくなる。
- gitの更新内容が、gitツール(gitlabを利用)から見える設定ができない。
##Jenkinsに作成済みのJOBを順次実行する
Jenkinsに登録済みの他のJobを呼び出すコマンド。この書き方をすると、jobが完了したら次のJobが実行される様になる。
node{
stage('first-stage'){
build job: 'first-job'
build job: 'second-job'
build job: 'third-job'
}
}
##Jenkinsに作成済みのJOBを並列実行する
複数のJOBを並列実行する場合のサンプル。下記の例の場合、first-job,second-jobが完了したら、third-jobの実行が開始される。
node {
stage('first-stage') { // for display purposes
parallel(
"stream1": {
echo 'start of stream1'
build job: 'first-job'
},
"stream2" : {
echo "start of stream2"
build job: 'second-job'
}
)
echo "2つのJOBが完了しました。。"
}
stage('second-stage'){
build("third-job")
}
}
##渡されたパラメータに応じて処理を変える。(Groovy)
This value is parameterizedにチェックを入れると、実行時に渡すパラメータとそのデフォルト値を指定することができる。下記の例は、value1の値が特定の値("999")だったら、second-stageを実行する。
node {
stage('first-stage') {
if(value1 == "999"){
echo "${value1}これはTrueです"
}else{
echo '${value1}これはfalseです'
}
sh 'sleep 3' #3秒待つ
}
if(value1=='999'){
stage('second-stage'){
echo 'this is secret stage!!!!!'
}
}
}
##リモートシェルを実行する
リモートシェルを呼び出すには、下記の様に記述する。jenkins上のcredentialを登録してリモート接続することもできるという記述もあったが、うまく行かなかった。
下記などを参考にし、鍵交換を行なうことが前提条件となる。
http://qiita.com/windows222/items/a6d1e8cdfd315bb8bcbb#ssh%E8%87%AA%E5%8B%95%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E8%A8%AD%E5%AE%9A
node {
stage('ssh-stage') {
def cmd = 'pwd'
def server = '192.168.1.46'
def user = 'jenkinstest'
sh "ssh -t -t ${user}@${server} ${cmd}"
}
}
##番外編:渡されたパラメータに応じて処理を変える。(shell)
下記の例は、shellでの処理変更の例。freestyleを利用した場合にはこの方法で処理を分岐する。
echo "value1の値は${value1}です"
if [ $value1 = '999' ]; then
echo "処理を実行します"
else
echo "処理を実行しません"
fi
#5秒待機
sleep 5