🗻

Jenkinsfile あれこれ - Diclarative Pipeline -

2022/09/04に公開

はじめに

JenkinsのPipelineのケーススタディなどのあれこれを1ページでまとめるもの。
徐々に深堀りし・書き足して自分のチートシートに仕上げたい。
場合によって長くなるものは切り出すが、こちらにリンクを張って運用する。
なお、基本的にPipelineのSyntaxは「Diclarative Pipeline」となる。

公式ページ

Jenkinsの公式ページは以下。
https://www.jenkins.io/doc/book/pipeline/#pipeline

確かにここに掲載されていることがほとんどなのだが、わかりにくい。
あと、覚えにくいので毎回ググることになる。

ジョブの最後に処理を入れたい

中身は大体stepsの中と同じ内容が書けます。

pipeline {
  agent any
  // omitted...
  post {
    failure {
      // 失敗時
    }
    success {
      // 成功時
    }
  }
}

ジョブの継続をユーザーに判断させる(手動承認)(簡易版)

単純に不特定多数のユーザーが応答できて良い場合は以下。
ジョブが閲覧・実行できるユーザーであれば誰でも承認ができる。

pipeline {
  agent any
  stages {
    steps {
	input message: "質問するメッセージ", ok: "OKするときの選択肢"
    }
  }
  // omitted...
}

ジョブの継続を特定ユーザーに判断させる(手動承認)

特定のユーザーにジョブの継続を判断させる場合は以下。
指定したユーザーでなければ、承認が行えない。

pipeline {
  agent any
  stages {
    steps {
	input(
		message: "質問するメッセージ", 
		ok: "OKするときの選択肢",
		submitter: "ユーザーIDを指定。カンマで複数可能"
	)
    }
  }
  // omitted...
}

シェルを複数行に渡って記載する

pipeline {
  agent any
  stages {
    steps {
      sh '''
      echo 1
      echo 2
      '''
    }
  }
  // omitted...
}

ビルド履歴をN個まで保持する

ビルド履歴を30個までとしたい場合

pipeline {
  agent any
  options {
    buildDiscarder(logRotator(numToKeepStr: '30'))
  }
  // omitted...
}

N分毎にジョブを実行する

10分毎に起動したい場合は以下

pipeline {
  agent any
  triggers {
    cron('H/10 * * * *')
  }
  // omitted...
}

GitのCheckoutをWorkspaceのサブディレクトリに行う

// omitted...
stage("Checkout") {
    steps {
        dir("$WORKSPACE") {
	    checkout(
	        [$class: "GitSCM"],
		branches: [[name: "$BRANCH_NAME"]],
		extensions: [
		    [
	                $class: "RelativeTargetDirectory",
		        relativeTargetDir: "1. !!!sub directory name here!!!"
		    ]
		],
		userRemoteConfigs: [
		    [
		        credentialsId: "2. !!!credentials id here!!!",
			url: "3. !!!git repository url here!!!"
		    ]
		]
	    )
	}
    }
}
番号 記載内容
1 サブディレクトリ名を指定。環境変数も利用可能
2 GitアクセスのためのCredentialsのIDを指定。Jenkinsの管理画面で確認可能
3 GitのURL

$WORKSPACE, $BRANCH_NAME はデフォルトで利用可能なEnvironmentとなる。
参照する際に、 $WORKSPACE はそのままでもあまり問題ないが、 $BRANCH_NAME の方はきちんと意図した指定となっているか気を付けたほうが良い。

終わりに

※間違いなど有りましたらコメントにて指摘をいただけると幸いです。
※間違った情報を拡散して人の時間を無駄に奪わぬよう修正は行います。

Discussion