You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GitLab CI/CD为C++项目生成对应版本的发布资产

GitLab CI/CD 配置:让Release资产绑定对应版本的二进制文件

你的问题核心在于当前配置的资产链接固定指向main分支的最新构建,且标签名称硬编码,导致所有Release共用同一个文件。要解决这个问题,需要让流水线与版本标签绑定,动态生成对应标签的资产链接,具体修改如下:

关键修改点

  • 流水线触发规则改为标签推送时触发,确保每个版本标签对应独立的构建和发布流程
  • 标签名称、资产URL使用GitLab预定义变量动态生成,避免硬编码
  • 资产链接指向对应标签的构建产物,而非固定分支

修改后的完整配置

build:
  tags:
    - docker_runner
  stage: build
  only:
    - tags  # 仅在推送标签时触发构建
  script:
    - mkdir release
    - apt update && apt install tree cmake ninja-build g++ -y 
    - cmake --preset default
    - cmake --build --preset default
    - cp cmake-build-default/hello_world release/hello_world
    - tree
  artifacts:
    paths:
      - release/hello_world
    expire_in: 30d  # 可选:设置产物过期时间,避免存储浪费

release:
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  only:
    - tags  # 仅在推送标签时触发发布
  tags:
    - docker_runner
  stage: release
  needs: ["build"]  # 依赖build阶段,确保先完成构建再发布
  script:
    - apt update && apt install tree -y 
    - tree
  release:
    tag_name: $CI_COMMIT_TAG  # 动态获取推送的标签名,比如v0.3.4
    description: "Release $CI_COMMIT_TAG"  # 动态生成描述
    assets:
      links:
        - name: 'hello_world'
          # 动态生成对应标签的资产URL,指向该标签构建的产物
          url: "$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_TAG/raw/release/hello_world?job=build"
  artifacts:
    paths:
      - release/hello_world

配置说明

  1. 触发规则:将only改为tags,意味着只有当你推送新标签(比如git tag v0.3.4 && git push origin v0.3.4)时,才会触发构建和发布流程,每个标签对应独立的流水线。
  2. 动态变量:
    • $CI_COMMIT_TAG:自动获取当前推送的标签名称,避免手动修改配置里的tag_name
    • $CI_PROJECT_URL:自动获取你的GitLab项目地址,不用硬编码URL前缀
    • 资产URL中的$CI_COMMIT_TAG替换了原来的main,确保链接指向当前标签对应的构建产物
  3. 依赖关系:添加needs: ["build"],确保release阶段必须等待build阶段完成,避免发布时产物还未生成。

使用流程

  1. 在本地代码仓库创建并推送新标签:
    git tag v0.3.4
    git push origin v0.3.4
    
  2. 流水线会自动触发构建,完成后生成对应标签的Release,资产链接指向该版本的二进制文件。

内容的提问来源于stack exchange,提问作者inscrip tions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:13