我正在创建一个Jenkins管道。这条管道正在建立三个工作岗位(JobOne,JobTwo,JobThree)。我可以使用以下代码运行该作业。
node {
stage 'Stage 1'
echo 'Hello World 1'
build 'Pipeline-Test/JobOne'
stage 'Stage 2'
echo 'Hello World 2'
build 'Pipeline-Test/JobTwo'
stage 'Stage 3'
echo 'Hello World 3'
build 'Pipeline-Test/JobThree'
}
现在我想在其中加入一些条件。例如,当JobOne失败时,作业必须再次重新启动。当JobTwo通过时,想再次运行工作。 JobTh完成后,JobThree应在10分钟后运行。我不确定如何使用这种情况制作管道。我是Jenkins管道的新手。
我检查了几个Jenkins WiKi页面,但是如果条件符合上述条件,则找不到合适的方法。我尝试下面的代码只是为了检查'如果'条件可以实施。但它失败了。
node {
stage 'Stage 1'
echo 'Hello World 1'
build 'Pipeline-Test/JobOne'
post {
always{
build 'Pipeline-Test/JobOne'
}
}
错误:
java.lang.NoSuchMethodError: No such DSL method 'post' found among [archive, bat, build, catchError, checkout, checkpoint, deleteDir, dir, dockerFingerprintFrom, dockerFingerprintRun, echo, error, fileExists, git, input, isUnix, load, mail, node, parallel, properties, publishHTML, pwd, readFile, retry, sh, sleep, sshagent, stage, stash, step, teamconcert, timeout, tool, triggerRemoteJob, unarchive, unstash, waitUntil, withCredentials, withDockerContainer, withDockerRegistry, withDockerServer, withEnv, wrap, writeFile, ws]
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:107)
有人可以指导我完成这个吗?
提前致谢!
答案 0 :(得分:8)
詹金斯管道肯定存在学习曲线,所以不要气馁:)
对于任何开始使用Jenkins Pipelines的人,我建议您查看Jenkins' official documentation以及Pipeline Steps Reference page。
仅供参考,stage
s without a block argument is deprecated;你应该按如下方式定义stage
:
stage('Name of Stage') {
// code
}
管道有一个retry step,如果失败,您可以使用它来重试JobOne
版本。
要在第2阶段和第3阶段之间等待10分钟,您可以使用sleep step。
if
语句就像在Java中一样编写,因为Groovy is actually compiled on a JVM。
if (animal == 'dog' || boolean == true) {
结合其中的每一个,我认为这是你可以使用的:
node {
stage ('Stage 1') {
echo 'Hello World 1'
retry(1) {
build 'Pipeline-Test/JobOne'
}
}
stage ('Stage 2') {
echo 'Hello World 2'
build 'Pipeline-Test/JobTwo'
}
sleep time:10, unit:"MINUTES"
stage ('Stage 3') {
echo 'Hello World 3'
build 'Pipeline-Test/JobThree'
}
}