1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Jenkins pipelineで、 docker agentをクリーンに利用する

Posted at

解決したい問題点

Jenkins pipelineで agentにDocker Containerを指定・実行した場合、
WorkspaceをCleanしているのにかかわらず、前回実行時のファイルが残っている。

この問題を解決するための記事です。

結論

私は ws("${WORKSPACE}/${BUILD_NUMBER}/${EXECUTOR_NUMBER}") を活用して、ディレクトリの分離を行いました。

pipeline {
    stages {
        stage("docker agent sample") {
            agent {
                docker {
                    image 'hoge.com/sample-run:latest'
                    label env.NODE_LABEL
                    args "--rm -v /etc/hosts:/etc/hosts:ro -v ${WORKSPACE}:${WORKSPACE}" // ホストの/etc/hostsを読み取り専用でマウント
                }
            }
            steps {
                ws("${WORKSPACE}/${BUILD_NUMBER}/${EXECUTOR_NUMBER}") {
                    script {
                    	resultText = "Currrent dir is ${WORKSPACE}/${BUILD_NUMBER}/${EXECUTOR_NUMBER}"
                        writeFile(file: "result.log", text: resultText)
                        archiveArtifacts artifacts: "result.log", allowEmptyArchive: true
                    }
                }
            }
        }
    }
}

原因

JenkinsがContainerを起動するときに -w ${WORKSPACE} が強制的に付与されます

$ docker run -t -d -u 0:0 --rm -v /etc/hosts:/etc/hosts:ro -w $WORKSPACE --volumes-from xxxxx -e ******** hoge.com/sample-run:latest cat

かつ、docker argで指定したとしても、パメーターをオーバーライドしてくるので、下記の様に-w オプションを付与しても 効果なしです

agent {
    docker {
        image 'hoge.com/sample-run:latest'
        label env.NODE_LABEL
        args "-w ${WORKSPACE}/${BUILD_NUMBER}/${EXECUTOR_NUMBER}"
    }
}
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?