詹金斯码头代理和工作区

时间:2018-02-01 00:16:45

标签: jenkins jenkins-plugins jenkins-pipeline

在我的一个阶段使用multibranch管道并运行docker代理,我发现容器内的工作区没有更新:

stage('run inside container') {
     agent {
         docker {
             image "my/image"}}
    steps{
       sh 'ls -l'
       ...

所以我发现jenkins正在运行这个docker命令:

docker run -t -d -u 1000:1000 -u root -w /home/jenkins/workspace/myworkspace@2

它安装工作区但是带有" 2"。这不是主工作区,看起来它没有更新。我怎样才能使用我的主工作区?

3 个答案:

答案 0 :(得分:0)

如果您的目标是在另一个容器中运行一个阶段,而不是使用代理,则只需执行以下操作:

stage("NPM Install") {
            steps {
                script {
                    docker.image("node:12.14.1-alpine").inside {

                        sh "npm install"
                    }
                }
            }
        }

通过这种方式,詹金斯将挂载当前管道代理的相同工作空间。

答案 1 :(得分:0)

在 docker 代理选项中使用 reuseNode true

stage('run inside container') {
     agent {
         docker {
             image "my/image"
             reuseNode true
         }
    }
    steps{
       sh 'ls -l'
       ...

Workspace synchronization in the docs

答案 2 :(得分:0)

如果并行触发了多个构建,Jenkins 会使用 myworkspace@2 或 @3 为用户创建新工作区。这是为了确保两个作业不会相互覆盖。

如果您的要求是一次只运行一项作业,您可以为您的作业启用“不允许并发构建”,如下图所示。

enter image description here