K. *_*ert 8 jenkins jenkins-pipeline
我正在创建一个声明式Jenkins管道,如下所示:
pipeline {
agent {
label 'mylabel'
}
stages {
stage('Install dependencies') {
milestone()
steps {
sh "yarn install"
}
}
stage('Lint files') {
steps {
sh "eslint src"
}
}
stage('Create bundle') {
steps {
sh "yarn run build:server"
sh "yarn run build:client"
}
}
stage('Publish') {
steps {
timeout(time: 15, unit: 'SECONDS') {
input(message: 'Deploy this build to QA?')
}
// deployment steps
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果超时步骤失败(因为我们不想部署此构建,或者没有人按下按钮等等),它的工作效果很好,构建标记状态为"已中止".不幸的是,这意味着例如Github将我们的拉取请求标记为"检查失败".
有没有办法用超时()步骤之前的状态声明构建?例如.如果构建在超时步骤之前成功,则应将其标记为成功,即使超时发生也是如此.
jpy*_*ams 15
由于您想要的只是让构建中止而不将其标记为失败,因此您只需try/catch在代码中添加一个简单的即可。
stage('Publish') {
steps {
script {
def proceed = true
try {
timeout(time: 15, unit: 'SECONDS') {
input(message: 'Deploy this build to QA?')
}
} catch (err) {
proceed = false
}
if(proceed) {
// deployment steps
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户中止构建或超时,错误将被抑制,构建仍然成功,部署步骤将不会执行。
在这种情况下,如果没有用户提交,我们就不想开始构建。由于scm中的错误,因此无法阻止消息或用户。然后,我们要做的是使构建失败并显示NOT_BUILT结果。
也许这也适合您的情况
在脚本中尝试以下操作
try {
stage ('wait') {
timeout(time: 15, unit: 'SECONDS') {
input(message: 'Deploy this build to QA?')
}
}
} catch (err) {
def user = err.getCauses()[0].getUser()
if('SYSTEM' == user.toString()) { //timeout
currentBuild.result = "SUCCESS"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6598 次 |
| 最近记录: |