如何在Jenkins Workflow中重复一个阶段

Tec*_*nch 9 groovy continuous-deployment jenkins cloudbees jenkins-workflow

我正在尝试在Cloudbees上使用Jenkins来自动部署我的软件.我设置我的工作流程如下.

詹金斯工作流程

有时候我想重新部署.(假设该阶段采用手动输入参数).我如何在工作流程中这样做?这是我的Groovy脚本.

def src = 'https://git.repo.url/proj.git'

stage 'Build'
node {
    env.JAVA_HOME="${tool name: 'Pre-Installed OpenJDK 8 (Latest) on DEV@Cloud nodes', type: 'hudson.model.JDK'}"
    sh 'javac -version'
    git credentialsId: 'abcdef', url: src
    sh 'ant -f build.xml proj.jar report'
}

stage 'Generate Release Version'
input message: 'Create Tar and Push to S3', ok: 'Generate Release'
node {
    // TODO
}

stage 'QA Approved'
input message: 'Enter a Tag Name to approve this build and tag in GIT', ok: 'Approve and Tag', parameters: [[$class: 'StringParameterDefinition', defaultValue: '', description: 'Eg: Sprint73', name: 'TAG_NAME']]
node {
    // TODO
}

stage 'DevOps - Ansible'
input message: 'Release to Production', ok: 'Release'
node {
    // TODO
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用构建管道而不是工作流来使用作业链,以便我可以重复阶段,但那是另一个有太多工作的故事.

Jes*_*ick 3

假设这是您希望能够重新启动的最后一个(Ansible)阶段,您可以checkpoint在它之前放置一个。

checkpoint 'about to deploy'
stage 'DevOps - Ansible'
input message: 'Release to Production', ok: 'Release'
node {
    // TODO
}
Run Code Online (Sandbox Code Playgroud)

如果您想部署到可选择的目标,您可以使用input:

checkpoint 'about to deploy'
stage 'DevOps - Ansible'
def target = input message: 'Where to release?',
    parameters: [[$class: 'StringParameterDefinition', name: 'target']]
node {
    // TODO
}
Run Code Online (Sandbox Code Playgroud)

更复杂的场景是,您希望在第一次时始终部署到标准目标,但是当从检查点恢复时,您希望向用户询问备用目标。为此,您需要知道何时恢复。目前checkpoint不直接提供此信息(CloudBees 内部问题跟踪器中的 CJP-1620),但有一个解决方法:

def origBuildNumber = env.BUILD_NUMBER
checkpoint 'about to deploy'
stage 'DevOps - Ansible'
def target
if (origBuildNumber == env.BUILD_NUMBER) { // original
    target = 'production'
} else { // resumed
    target = input message: 'Where to release?',
        parameters: [[$class: 'StringParameterDefinition', name: 'target']]
}
node {
    // TODO
}
Run Code Online (Sandbox Code Playgroud)