0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[02] declarative pipeline の使用例 -- 使用する Slave(ノード) をパラメータで指定する

Last updated at Posted at 2021-10-03
本シリーズのトップページ
https://qiita.com/robozushi10/items/52a393aee1ba57999196

概要

パラメータを Pipeline declarative で使用する例.
次のパターンを書き残しておく.
Jenkins バージョンは Jenkins 2.314 である.

1. 文字列パラメータ「NODENAME」を設けて Slave名 1台を入力する
2. 選択肢パラメータ「NODENAME」を設けて Slave名 1台を入力する
3. 文字列パラメータ「NODENAME」を設けて Slave名 1台か全台(all)かを入力する

環境

下記で構築した Master(1台) - Slave(8台) [SSH通信] を使って Pipeline を書いてみる.
(OS は Linux である)

[シリーズ] docker-compose を使って同一物理マシン上に Jenkins Master(docker) - Slave(docker) [SSH通信]を構築する

コード

1. 文字列パラメータ「NODENAME」を設けて Slave名 1台を入力する

次の (1)(2) を満すこと. 単に(1)のみであれば、パラメータは作成されない.

(1) 下記💚としてパラメータ「NODENAME」を定義する.
(2) 🛑 のように params.NODENAME としてパラメータ「NODENAME」にアクセスする.

pipeline {
    parameters {
        string(name: 'NODENAME', defaultValue: '', description: 'ノード名') // 💚
    }
    agent any
    stages {
        stage('stage-1') {
            steps {
                echo "「${params.NODENAME}」が指定されました." // 🛑
            }
        }
    }
}

上記のような実装をすると、
次のように GUI 上にもパラメータが作成されている.

image.png

 

2. 選択肢パラメータ「NODENAME」を設けて Slave名 1台を入力する

pipeline {
    parameters {
        choice(
            name: 'NODENAME',
            choices: [
                'slave001',
                'slave002',
                'slave003',
                'slave004',
                'slave005',
                'slave006',
                'slave007',
                'slave008',
            ],
            description: 'ノード名'
        )
    }
    agent any
    stages {
        stage('stage-1') {
            steps {
                echo "「${params.NODENAME}」が指定されました."
            }
        }
    }
}

次のように選択肢パラメータが作成されている.

image.png

 

3. 文字列パラメータ「NODENAME」を設けて Slave名 1台か全台(all)かを入力する

グロバール変数として List型で選択肢を定義しておく.

def List L_NODES = [
                'all',
                'slave001',
                'slave002',
                'slave003',
                'slave004',
                'slave005',
                'slave006',
                'slave007',
                'slave008',
            ]

pipeline {
    parameters {
        choice(
            name: 'NODENAME',
            choices: L_NODES,
            description: 'ノード名'
        )
    }
    agent any
    stages {
        stage('stage-1') {
            steps {
                script {
                    N = params.NODENAME
                    if(N == 'all'){
                        // all が選択されたら全台で実行する
                        for(i = 1; i < L_NODES.size(); i++){
                            N = L_NODES[i]
                            stage("stage -- ${N}"){
                                node(N){
                                    echo "コンテナ「${N}」でコマンド hostname を実行します."
                                    sh "hostname"
                                }
                            }
                        }
                    }
                    else {
                        // all 以外の場合は指定された 1台のみで実行する
                        stage("stage -- ${N}"){
                            node(N){
                                echo "コンテナ「${N}」でコマンド hostname を実行します."
                                sh "hostname"
                            }
                        }
                    }
                }
            }
        }
    }
}

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?