创建 Gitlab 存储库并通过 API 提供基本设置

问题描述

我想通过脚本实现以下任务:

  1. 在 Gitlab 上创建一个新项目/存储库
  2. 创建两个受保护的分支:mainstable
  3. 选择合并策略:“Semilinear with Merge Commits”
  4. 允许维护者进入 main(Jenkins-CI 将作为维护者访问 repo)
  5. 允许开发者+维护者合并
  6. 必须在合并前解决讨论
  7. 在合并之前验证构建必须成功
  8. 不允许合并到stable

解决方法

我想出了这个方法:

创作

git init
git remote add origin git@gitlab.com/....
git checkout -b main
git commit -a --allow-empty -m"Initial Commit!"
git push origin main
git checkout -b stable
git push origin stable

配置

#! /bin/bash 

GITLAB_PROJECT_ID=$1
GITLAB_TOKEN=$2

repo_config=$(cat <<EOF
{
   "merge_method" : "rebase_merge","auto_devops_enabled" : false,"only_allow_merge_if_pipeline_succeeds" : true,"merge_requests_enabled" : true,"allow_merge_on_skipped_pipeline" : false,"only_allow_merge_if_all_discussions_are_resolved" : true,"visibility" : "internal"
}
EOF
)

main_branch_config=$(cat <<EOF
{
      "name": "main","allowed_to_push": [{"access_level": 40}],"allowed_to_merge": [{
          "access_level": 30
        },{
          "access_level": 40
        }
      ]}
EOF
)

stable_branch_config=$(cat <<EOF
{
      "name": "stable","allowed_to_merge": [{"access_level": 0}]
}
EOF
)

curl "https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID" \
-i \
-X PUT \
-H "content-type:application/json" \
-H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
-d "$repo_config" 

curl "https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/protected_branches" \
-X POST \
-i \
-H "content-type:application/json" \
-H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
-d "$main_branch_config" 

curl "https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/protected_branches" \
-i \
-X POST \
-H "content-type:application/json" \
-H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
-d "$stable_branch_config" 

注意只有“高级”安装才支持在受保护分支上设置权限。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...