Skip to content

Jenkins 宣言型パイプラインとスクリプト型パイプライン

作者:Lee 等
最后更新:

宣言型パイプライン

Jenkinsfile(宣言型パイプライン)

groovy
pipeline {
    agent any // 任意のノードで実行可能;noneを指定し、グローバルagentなしにもできる。
    stages {
        stage('Build') {
          agent { // 実行ノード指定
              label 'master'
            }
            steps {
                //
            }
        }
        stage('Test') {
            steps {
                //
            }
        }
        stage('Deploy') {
            steps {
                //
            }
        }
    }
}

各 stage には steps は 1 つだけ配置でき、 agent { label 'master' } でその stage の実行ノードを指定できます。

宣言型パイプラインの特徴

  1. 異なる stage で同じ label を指定しても、実行ノードが必ずしも同じとは限らず、Jenkins はその label に紐づく使用可能なノードをランダムで割り当てます。
  2. バージョン管理システムで Jenkinsfile を管理する場合、宣言型パイプラインは各ステージごとにリポジトリ全体をルートディレクトリにチェックアウトするため、サブノードにも git のインストールが必要です。
  3. 同じ steps ブロック内では前のコマンドの状態を継承します。例えば、最初の行が sh 'cd nya' の場合、2 行目は nya ディレクトリ内で実行されます。

特徴1への対応策

最初にノードを呼び出す際に env.NODE_NAME をグローバル変数に渡し、その変数を使いたいノードの label タグに格納します。

env.NODE_NAME は Jenkins の組み込み変数で、現在のステージが動作するノード名を示します。

スクリプト型パイプライン

Jenkinsfile(スクリプト型パイプライン)

groovy
node('master') { // masterラベルのノードを指定
    stage('Build') {
        //
    }
    stage('Test') {
        //
    }
}
node('RVV') { // RVVラベルのノードを指定
    stage('Build') {
        //
    }
    stage('Test') {
      sh 'にゃー'
      sh 'にゃー'
    }
}

シンプルで便利、 pipeline フレームワークなしで、node ブロックでノード実行をコントロールできます。使用例:https://github.com/Leetfs/opencv-riscv-perf/blob/main/Jenkinsfile

スクリプト型パイプラインの特徴

  1. 1 つのパイプライン内で複数の node が使え、1 つの node で複数の stage が指定可能。同じ node ブロック内の各 stage は同一ノードで動作します。
  2. バージョン管理で Jenkinsfile を管理しても、スクリプト型パイプラインは Jenkinsfile だけをノードで読み込み、リポジトリ全体は取得しません。リポジトリ内容が必要な場合は自分で clone してください。
  3. 同じ steps ブロック内でも前のコマンド状態は継承されません。例えば 1 行目が sh 'cd nya' なら、2 行目の作業ディレクトリは依然としてデフォルトの作業領域です(nya ではありません)。
    • 複数行スクリプト sh ''' 内容 ''' はこの制限を受けません。なぜなら複数行コマンドはひとつの sh ブロック内で処理されるためです。

页面历史