如何在GitLab CI/CD中动态设置环境变量实现版本自增与Git打标签
GitLab CI自动递增版本号并打标签实现方案
前置准备
- 提前在项目「设置」-「CI/CD」-「变量」中创建名为
VERSION的整数类型变量,填入初始版本号,不要设置仅受保护分支可见,确保合并请求流水线可读取该变量 - 你使用的
GITLAB_PERSONAL_ACCESS_TOKEN需要开通api权限,且对当前项目拥有Maintainer及以上权限,用于调用GitLab接口更新CI变量
完整可运行CI配置
variables: PROFILE_NAME: default default: image: docker-image stages: - tagging Tag: stage: tagging script: # 安装依赖 - yum install git curl -y - git --version # 配置git仓库权限 - git remote set-url --push origin ${CI_SERVER_PROTOCOL}://${GITLAB_PERSONAL_ACCESS_TOKEN_NAME}:${GITLAB_PERSONAL_ACCESS_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git - git config --global user.name "GitLab CI" - git config --global user.email "ci@example.com" # 拉取最新标签避免冲突 - git fetch --tags # 版本号自增 - NEW_VERSION=$((VERSION + 1)) - echo "新版本号:${NEW_VERSION}" # 回写新版本号到GitLab项目CI变量 - | curl --request PUT \ --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" \ "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/variables/VERSION" \ --form "value=${NEW_VERSION}" # 打版本标签,标签格式可自行修改 - git tag -a v${NEW_VERSION} -m "自动发布版本 v${NEW_VERSION}" - git push origin v${NEW_VERSION} only: refs: - merge_requests variables: - ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^dev/ || $CI_COMMIT_BRANCH =~ /^dev/ || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release-/ || $CI_COMMIT_BRANCH =~ /^release-/) except: variables: - ($CI_COMMIT_BEFORE_SHA == '0000000000000000000000000000000000000000' && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME !~ /^./)
核心改动说明
- 修正了原配置中stage名称不匹配的问题,任务stage和全局stages定义对齐
- 新增curl工具安装,用于调用GitLab OpenAPI完成CI变量更新
- 新增git用户配置,避免打标签时无用户信息报错
- 新增版本号回写逻辑,通过GitLab官方接口将自增后的版本号持久化存储到项目CI变量中
- 补充了实际打标签、推送标签的逻辑,原配置仅执行了空的标签推送命令
- 你可根据需求修改标签命名规则,如需带小数点的版本号可调整自增逻辑适配语义化版本规则
内容的提问来源于stack exchange,提问作者H.Chloe
相关产品推荐
相关产品推荐

