GitLab CI 自动发布 Release 版本包
需求
当向 gitlab 推送 tag 时自动生成 Release 发布包的自动 CI 功能
实现
首先在对应仓库生成一个 Project Access Token,授权 api 和 write_repository 权限,然后在仓库的设置-CI/CD 新增 Variable 名称为 ACCESS_TOKEN、值为上一步生成的 Token。
-
当有推送 tag 时、自动触发 gitlab CI 任务
编写 CI 配置文件 .gitlab-ci.yml1
2
3
4
5
6
7
8Create_Release:
stage: deploy
tags:
- runner # 指定runner
only:
- tags # 仅对推送 tag 时触发
script:
- bash deploy_release.sh -
生成 Release 版本并上传到 gitlab 存储空间
cat deploy_release.sh1
2
3
4
5
6base_url=https://git.example.dev
# upload
output=$(curl --request POST --header "PRIVATE-TOKEN:${ACCESS_TOKEN}" \
--form "[email protected]" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/uploads)
# 文件URL路径提取
full_path=$(echo $output | grep -o '"full_path":"[^"]*' | cut -d '"' -f 4) -
记录文件 URL,发布到 Release 页面
1
2
3
4
5
6
7[ -z ${full_path} ] && exit 1
# "Create release"
now=$(date +%Y%m%d%H%M)
curl --header "Content-Type:application/json" --header "PRIVATE-TOKEN:${ACCESS_TOKEN}" \
--data "{\"name\":\"${CI_COMMIT_TAG}\", \"tag_name\":\"${CI_COMMIT_TAG}\", \"description\":\"Auto Deploy at ${now}\", \"assets\":{ \"links\":[{ \"name\":\"release.tar.gz\", \"url\":\"${base_url}/${full_path}\",\"link_type\":\"package\" }] } }" \
--request POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" >/dev/null && echo " Success "