gitlab CI上的批准步骤

gitlab CI上的批准步骤,gitlab,gitlab-ci,pipeline,Gitlab,Gitlab Ci,Pipeline,我想讨论并了解更多关于如何在Gitlab CI上添加批准步骤的方法 每个人都知道gitlab在管道上没有批准功能 我做了一个小模板,在任何步骤中添加一种批准步骤 这是模板的内容 .approval_template: image: node:buster before_script: - | cat <<'EOF' >> approval.js var users = process.env.USERS.split(',');

我想讨论并了解更多关于如何在Gitlab CI上添加批准步骤的方法 每个人都知道gitlab在管道上没有批准功能

我做了一个小模板,在任何步骤中添加一种批准步骤

这是模板的内容

.approval_template:
  image: node:buster
  before_script:
    - |
      cat <<'EOF' >> approval.js
      var users = process.env.USERS.split(',');

      if (users.includes(process.env.GITLAB_USER_LOGIN)) {
          console.log(process.env.GITLAB_USER_LOGIN + " allowed to run this job")
          process.exit(0)
      } else {
        console.log(process.env.GITLAB_USER_LOGIN + " cannot trigger this job")
        console.log("List of users allowed to run this job")
        for (user in users)
        {
          console.log(users[user])
        }
        process.exit(1)
      }
      EOF
    - node approval.js
    - rm approval.js
  when: manual
.approval\u模板:
图片:node:buster
在脚本之前:
- |
cat approval.js
var users=process.env.users.split(',');
if(users.includes(process.env.GITLAB\u USER\u LOGIN)){
console.log(process.env.GITLAB_USER_LOGIN+“允许运行此作业”)
进程。退出(0)
}否则{
console.log(process.env.GITLAB\u USER\u LOGIN+“无法触发此作业”)
log(“允许运行此作业的用户列表”)
for(用户中的用户)
{
console.log(用户[用户])
}
进程。退出(1)
}
EOF
-node approval.js
-rm approval.js
时间:手动
它是如何工作的

此模板检查触发作业的用户是否在USERS变量(数组)内 检查发生在before\u脚本块上,并且在任何步骤中都有效(不覆盖before\u脚本)


它工作得很好,但我想知道是否有更好的方法来实现它。

任何对存储库具有写访问权限的人都可以更改该文件并将自己添加到列表中。但我对脚本化方法的关注是不同的,因为您可能最终会用一块要维护的代码混淆您未来的自己或您的继任者。触发工作的人可能与审查代码的人不同,我也不确定你是否想假设触发等于批准

让我解释一下我一直在做什么:想象一下有一个
开发
和一个
主机
分支-只有
主机
会自动部署。当您需要时,没有人可以直接推送到
master
。必须使用合并请求将所有内容合并到
master
。权限方面,它仍然归结为具有写访问权限(开发人员或更高的角色)。这将在GUI中保留审批步骤(添加审批功能后,您希望在GUI中显示审批功能)。此外,接受合并请求将触发专用电子邮件通知

当您确保合并到
master
是一个禁忌时,这一点非常有效,但首席开发人员除外。也许这不适用于你的情况,但不同的方法;即使是这一次,我的继任者也需要接受关于在何处单击以批准合并请求的教育


如果您想快速跟踪某些开发人员的部署,您可以为他们分配一个更高的角色,并使用我建议的方法让他们直接推送到
master
分支。这样他们就跳过了等待批准的步骤。

我觉得这个解决方案虽然有效,但有点麻烦。根据管道的自定义程度,您可以始终使用并仅指定允许从那里运行作业的用户。