【问题标题】:jenkins docker agent and workspaces詹金斯码头代理和工作区
【发布时间】:2018-02-01 00:16:44
【问题描述】:

在我的某个阶段使用多分支管道并运行 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”。这不是主工作区,看起来它没有被更新。如何让它使用我的主工作区?

【问题讨论】:

标签: jenkins jenkins-plugins jenkins-pipeline


【解决方案1】:

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

stage("NPM Install") {
            steps {
                script {
                    // this will  generate node_modules folder and map it 
                    // back to this workspace.
                    docker.image("node:12.14.1-alpine").inside {

                        sh "npm install"
                    }
                }
            }
        }

这样 Jenkins 会将当前管道工作区与容器绑定挂载。

【讨论】:

    【解决方案2】:

    在 docker 代理选项中使用 reuseNode true

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

    Workspace synchronizationin the docs

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 2020-09-28
        • 2018-07-01
        • 1970-01-01
        • 2015-07-25
        • 2022-09-27
        • 2017-11-22
        相关资源
        最近更新 更多