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.yml
Create_Release: stage: deploy tags: - runner # 指定runner only: - tags # 仅对推送 tag 时触发 script: - bash deploy_release.sh -
生成 Release 版本并上传到 gitlab 存储空间 cat deploy_release.sh
base_url=https://git.example.dev # upload output=$(curl --request POST --header "PRIVATE-TOKEN:${ACCESS_TOKEN}" \ --form "file=@release.tar.gz" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/uploads) # 文件URL路径提取 full_path=$(echo $output | grep -o '"full_path":"[^"]*' | cut -d '"' -f 4) -
记录文件 URL,发布到 Release 页面
[ -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 "