首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins中多个阶段之间的重用代理(docker容器)

Jenkins中多个阶段之间的重用代理(docker容器)
EN

Stack Overflow用户
提问于 2018-05-22 04:53:26
回答 3查看 12.3K关注 0票数 13

我有一个具有多个阶段的流水线,我想在n个阶段之间重用一个docker容器,而不是所有阶段:

代码语言:javascript
复制
pipeline {
   agent none

   stages {
       stage('Install deps') {
            agent {
                docker { image 'node:10-alpine' }
            }

            steps {
                sh 'npm install'
            }
        }

       stage('Build, test, lint, etc') {
            agent {
                docker { image 'node:10-alpine' }
            }

            parallel {
                stage('Build') {
                    agent {
                        docker { image 'node:10-alpine' }
                    }

                    // This fails because it runs in a new container, and the node_modules created during the first installation are gone at this point
                    // How do I reuse the same container created in the install dep step?
                    steps {
                        sh 'npm run build'
                    }
                }

                stage('Test') {
                    agent {
                        docker { image 'node:10-alpine' }
                    }

                    steps {
                        sh 'npm run test'
                    }
                }
            }
        }


        // Later on, there is a deployment stage which MUST deploy using a specific node,
        // which is why "agent: none" is used in the first place

   }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-22 05:40:14

您可以使用scripted pipelines,其中您可以将多个stage步骤放入一个docker步骤中,例如

代码语言:javascript
复制
node {
  checkout scm
  docker.image('node:10-alpine').inside {
    stage('Build') {
       sh 'npm run build'
     }
     stage('Test') {
       sh 'npm run test'
     }
  }
}

(代码未测试)

票数 8
EN

Stack Overflow用户

发布于 2020-04-14 06:12:14

请参阅Jenkins Pipeline docker代理的reuseNode选项:

https://jenkins.io/doc/book/pipeline/syntax/#agent

代码语言:javascript
复制
pipeline {
  agent any

  stages {
    stage('NPM install') {
      agent {
        docker {
          /*
           * Reuse the workspace on the agent defined at top-level of
           * Pipeline, but run inside a container.
           */
          reuseNode true
          image 'node:12.16.1'
        }
      }

      environment {
        /*
         * Change HOME, because default is usually root dir, and
         * Jenkins user may not have write permissions in that dir.
         */
        HOME = "${WORKSPACE}"
      }

      steps {
        sh 'env | sort'
        sh 'npm install'
      }
    }
  } 
}
票数 16
EN

Stack Overflow用户

发布于 2019-04-14 06:29:39

对于声明式管道,一种解决方案是在项目的根目录中使用Dockerfile。例如

文档文件

代码语言:javascript
复制
FROM node:10-alpine
// Further Instructions

Jenkinsfile文件

代码语言:javascript
复制
pipeline{

    agent {
        dockerfile true
    }
    stage('Build') {
        steps{
            sh 'npm run build'
        }
    }
     stage('Test') {
        steps{
            sh 'npm run test'
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50456491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档