首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道中的多个Jenkins节点

管道中的多个Jenkins节点
EN

Stack Overflow用户
提问于 2017-12-07 06:26:42
回答 1查看 2.9K关注 0票数 0

目前我们有一个有4个阶段的jenkins管道。设置、构建、部署、拆卸。手动用户输入的Deploy和Teardown提示。正因为如此,我们不希望手动用户输入占用executor。因此,我们希望使用agent none。然而,当恢复时,没有保证人我们得到相同的jenkins工作空间。Stash/unstash说它使用了很多资源,所以如果你有大文件,就不要使用它。有没有一种方法可以获得确切的从机,并且在恢复时,在同一从机上运行?

我现在有这样的东西,我也尝试了顶层的代理gcp,并将代理none放在手动输入中。

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

 environment {
    userInput = false
 }

stages {
    stage('Setup') {
        agent { node { label 'gcp' } }
        steps {
            deleteDir()
            dir('pipelines') {
                checkout scm
            }
            dir('deployment_pipelines'){
                git branch: __deployment_scripts_code_branch, credentialsId: 'jenkins', url: __deployment_scripts_code_repo
            }
            dir('gcp_template_core'){
                git branch: __gcp_template_code_branch, credentialsId: 'jenkins', url: __gcp_template_code_repo
            }
            dir('control_repo'){
                 git branch: _control_repo_branch, credentialsId: 'jenkins', url: _control_repo
            }

            // Copy core templates to the project
            sh('bash deployment_pipelines/deployment/setup.sh gcp_template_core/gcp_foundation/ control_repo')
        }
    }

    stage('Build') {
        agent { node { label 'gcp' } }
        steps {
            sh('printenv') //TODO: Remove. Debug only
            sh('python deployment_pipelines/deployment/build.py control_repo --env ${_env_type_long}')
        }
    }

    stage('Deploy') {
        agent { node { label 'gcp' } }
        steps {
            sh('python deployment_pipelines/deployment/deploy.py control_repo --env ${_env_type_short}')
        }
    }

     stage('Release') {
        steps {
            agent none
            script {
                sh('python deployment_pipelines/deployment/set_manual_approvers.py deployment_pipelines/config/production-release-approvers.yaml -o approver.txt')
                def approvers = readFile('approver.txt')

                try {
                    userInput = input(
                        message: 'Do you want to proceed with Release?',
                        submitter: approvers)
                } catch(err) { // input false
                    //def user = err.getCauses()[0].getUser() //need script approval for getUser()
                    userInput = false
                    // echo "Aborted by [${user}]"
                }
                agent { node { label 'gcp' } }
                if(userInput)
                {
                    sh("echo 'Do Release'")
                }
            }
        }
    }
    stage('Teardown'){
        agent { node { label 'gcp' } }
        steps {
             script {
                def approvers = readFile('approver.txt')

                try {
                    userInput = input(
                        message: 'Do you want to proceed with Teardown?',
                        submitter: approvers)
                } catch(err) { // input false
                    //def user = err.getCauses()[0].getUser() //need script approval for getUser()
                    userInput = false
                    // echo "Aborted by [${user}]"
                }
                if(userInput)
                {
                    sh("echo 'Do Teardown'")
                }
            }
        }
    }
}

post {
    always {
        echo 'DO TEARDOWN REGARDLESS'
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-12-18 21:43:09

代理none应该在阶段(‘Release’)的步骤块之上。有关语法和流程,可以参考https://jenkins.io/doc/book/pipeline/syntax/#agent

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47684510

复制
相关文章

相似问题

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