9

我正在尝试在 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
}

我尝试使用 Build Pipeline 而不是 Workflow 来使用 Job Chaining,这样我就可以重复阶段,但那是另一个有太多工作的故事。

4

2 回答 2

4

这只能在 Jenkins 的企业版中实现。正如@jesse-glick 指出的那样,您可以在那里使用检查点插件,请参阅文档

根据 CloudBees 的说法,目前没有计划在 OSS 版本中支持此功能。看到这个问题:JENKINS-33846

于 2016-12-06T08:02:45.540 回答
3

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

checkpoint 'about to deploy'
stage 'DevOps - Ansible'
input message: 'Release to Production', ok: 'Release'
node {
    // TODO
}

如果要部署到可选目标,可以使用input

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

更复杂的场景是,您希望始终在第一次部署到标准目标,但在从检查点恢复时,您希望向用户询问备用目标。为此,您需要知道何时恢复。目前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
}
于 2015-10-02T11:46:36.683 回答