..
我的工单已经申请通过了,但是还是没有权限
最近总是有人象我反馈,他申请权限的工单已经走完了流程,但是还是没有权限。我看了一下,他的工单确实通过了,但是看到走后的自动化任务执行情况,只执行了部分任务,没有执行全部的。我怀疑是我们的内部工单系统,没有调用我们的 Jenkins 任务,导致没有部分添加权限的任务没有被执行,但是实际看工单系统的日志,发现是请求了 Jenkins 的,所以不存在没有调用的情况。
我们的工单流程是:工单系统->审批流程->webhook->Jenkins任务。 在 Jenkins 上通过 Ansbile 实现自动化任务。
今天我无意中发现,如果同时间多次触发 Jenkins 任务,只会执行一次任务,并不会每次触发都执行。从下面的截图可以看出来,我触发了 3 次,但是只执行了一次。
这种场景一般是多个工单同时间通过,在短时间内都执行 Webhok,导致 Jenkins 的任务被合并到只执行一次,就会导致部分权限没有添加。
解决方案可以参考: https://www.cnblogs.com/bolingcavalry/p/13800722.html
大概原理就是显示的告诉 Jenkins , 我的任务是有参数的任务,不要合并执行,强制设置 Jenkins 任务为带参数的任务。
#!/usr/bin/env groovy
pipeline {
agent {
label "devops"
}
triggers {
GenericTrigger(
genericVariables: [
[key: 'group', value: '$.group'],
[key: 'user', value: '$.apply_user']
],
causeString: 'add $user to group $group',
token: 'docker',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
shouldNotFlattern: false
)
}
stages {
stage('申请 jfrog 权限') {
steps {
script {
currentBuild.displayName = "${group}~${user}"
currentBuild.description = "给 ${user} 添加到 ${group} 组"
sh """
export JFROG_CLI_LOG_LEVEL=DEBUG
jf rt group-add-users ${group} ${user}
"""
}
}
}
}
}