..

我的工单已经申请通过了,但是还是没有权限

最近总是有人象我反馈,他申请权限的工单已经走完了流程,但是还是没有权限。我看了一下,他的工单确实通过了,但是看到走后的自动化任务执行情况,只执行了部分任务,没有执行全部的。我怀疑是我们的内部工单系统,没有调用我们的 Jenkins 任务,导致没有部分添加权限的任务没有被执行,但是实际看工单系统的日志,发现是请求了 Jenkins 的,所以不存在没有调用的情况。

我们的工单流程是:工单系统->审批流程->webhook->Jenkins任务。 在 Jenkins 上通过 Ansbile 实现自动化任务。

今天我无意中发现,如果同时间多次触发 Jenkins 任务,只会执行一次任务,并不会每次触发都执行。从下面的截图可以看出来,我触发了 3 次,但是只执行了一次。 jenkins

这种场景一般是多个工单同时间通过,在短时间内都执行 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}
                    """
                }
            }
        }
    }
}

jenkins-1 jenkins-2 jenkins-3