我试图在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
}
我尝试使用构建管道而不是工作流来使用作业链,以便我可以重复阶段,但这是另一个有太多工作的故事。
答案 0 :(得分:4)
这仅适用于Jenkins的企业版。正如@ jesse-glick指出的那样,你可以使用Checkpoint插件,请参阅documentation。
根据CloudBees,目前还没有计划在OSS版本中支持此功能。请参阅此问题:JENKINS-33846
答案 1 :(得分: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
}