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 1 year has passed since last update.

[04] declarative pipeline の使用例 -- 成果物を登録する

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

概要

Slave 8台から空いている Slave を選択して、コマンド「hostname」を実行する.
この結果を result.txt に書き出して Jenkins の成果物として登録する例である.
次の 1, 2, 3 と実装を進め、4 で成果物を登録する.

1. Slave は実行時に一時ディレクトリ「/tmp/hoge/」でコマンド hostname を実行する
2. 作成した一時ディレクトリ「/tmp/hoge/」を削除する
3. コマンド hostname の結果を result.xt に書き出す
4. Jenkins ジョブの成果物として result.txt を登録する

なお、使用した Jenkins バージョンは Jenkins 2.314 である.

環境

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

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

コード

1. Slave は実行時に一時ディレクトリ「/tmp/hoge/」でコマンド hostname を実行する

dir('/tmp/hgoe'){ 〜 } と書くと、自動的にディレクトリを作成してくれる.
なお、カレントディレクトリを確認するために pwd() を呼び出している.

pipeline {
    agent {label 'slave001 || slave002 || slave003 || slave004 || slave005 || slave006 || slave007 || slave008'}
    stages {
        stage ("stage-1") {
            steps {
                dir('/tmp/hoge'){
                    // 現在、/tmp/hoge に居ることをログ表示させる. 
                    println(pwd())
                    echo "NODE: ${env.NODE_NAME}"
                    sh "hostname"
                }
            }
        }
    }
}

 

2. 作成した一時ディレクトリ「/tmp/hoge/」を削除する

上記 1 の記述だと、/tmp/hoge/ ディレクトリが残ってしまう.
そこで作業が済んだら、/tmp/hoge を削除するようにする.

が、私は (ミスしたときが心配なため) deleteDir() は使用していない...

mktemp -d -p ベースディレクトリ によって自前で一時的な作業場を準備している.

pipeline {
    agent {label 'slave001 || slave002 || slave003 || slave004 || slave005 || slave006 || slave007 || slave008'}
    stages {
        stage ("stage-1") {
            steps {
                dir('/tmp/hoge'){
                    // 現在、/tmp/hoge に居ることをログ表示させる. 
                    println(pwd())
                    echo "NODE: ${env.NODE_NAME}"
                    sh "hostname"
                    // 現在居る /tmp/hoge ディレクトリを削除する
                    deleteDir()
                }
            }
        }
    }
}

 

3. コマンド hostname の結果を result.xt に書き出す

個人的には「hostname > result.txt」で済ませてしまいたいが、
真面目に Pipeline declarative の関数 writeFile を使うと次のようになる.
なお、下記の場合は上書き作成である.

pipeline {
    agent {label 'slave001 || slave002 || slave003 || slave004 || slave005 || slave006 || slave007 || slave008'}
    stages {
        stage ("stage-1") {
            steps {
                dir('/tmp/hoge'){
                    echo "NODE: ${env.NODE_NAME}"
                    script {
                        BUFF = sh (
                                  script: "hostname",
                                  returnStdout: true
                               ).trim()
                        writeFile file: 'result.txt', text: BUFF
                    }
                }
            }
        }
    }
}

 

4. Jenkins ジョブの成果物として result.txt を登録する

次のように
archiveArtifacts artifacts: 'result.txt', followSymlinks: false
というコードを書くと、下図の通り成果物として result.txt が登録される.

Slave 側で生成したファイルが、Master 上に次のように配置されているので便利である.
「/var/jenkins_home/jobs/sample/builds/119/archive/result.txt」

pipeline {
    agent {label 'slave001 || slave002 || slave003 || slave004 || slave005 || slave006 || slave007 || slave008'}
    stages {
        stage ("stage-1") {
            steps {
                dir('/tmp/hoge'){
                    println(pwd())
                    echo "NODE: ${env.NODE_NAME}"
                    script {
                        BUFF = sh (
                                  script: "hostname",
                                  returnStdout: true
                               ).trim()
                        writeFile file: 'result.txt', text: BUFF
                    }
                    archiveArtifacts artifacts: 'result.txt', followSymlinks: false
                }
            }
        }
    }
}

image.png

 

参考にしたサイト

https://stackoverflow.com/questions/48068733/create-a-temporary-directory-for-specific-steps-in-jenkins-pipeline
Udemy Jenkins Begginer To Pro

以上

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?