Gitlab:如何使用Gitlab的CI/CD生成发布资产

问题描述 投票:0回答:1

我正在尝试使用 gitlab 的 CI/CD 编译 c++ 项目并创建一个版本,但是,我很难理解如何将我的二进制文件作为发布页面上的资产。 我设法获得指向工件的资产,但我的所有版本都将指向最后一个二进制文件。 有谁知道执行此操作的正确方法是什么? 这是我的管道脚本:

build:
  tags:
    - docker_runner
  stage: build
  only:
    - main
  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

release:
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  only:
    - main
  tags:
    - docker_runner
  stage: release
  script:
    - apt update && apt install tree -y 
    - tree
  release:
    tag_name: v0.3.3
    description: v3.3
    assets:
      links:
        - name: 'hello_world'
          url: https://........./-/jobs/artifacts/main/browse?job=build
  artifacts:
    paths:
      - release/hello_world

谢谢

我尝试搜索文档,但找不到清楚解释这一点的地方

gitlab gitlab-ci release cicd release-management
1个回答
0
投票

不建议将作业工件链接直接附加到版本,因为工件是短暂的,并且用于在同一管道中传递数据。这意味着它们存在过期或有人可能手动删除它们的风险。

推荐的方法是使用 GitLab Packages Registry 并将二进制文件作为通用包发布到此注册表

这是 Gitlab 文档中的示例

stages:
  - build
  - upload
  - release

variables:
  # Package version can only contain numbers (0-9), and dots (.).
  # Must be in the format of X.Y.Z, i.e. should match /\A\d+\.\d+\.\d+\z/ regular expresion.
  # See https://docs.gitlab.com/ee/user/packages/generic_packages/#publish-a-package-file
  PACKAGE_VERSION: "1.2.3"
  DARWIN_AMD64_BINARY: "myawesomerelease-darwin-amd64-${PACKAGE_VERSION}"
  LINUX_AMD64_BINARY: "myawesomerelease-linux-amd64-${PACKAGE_VERSION}"
  PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/myawesomerelease/${PACKAGE_VERSION}"

build:
  stage: build
  image: alpine:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - mkdir bin
    - echo "Mock binary for ${DARWIN_AMD64_BINARY}" > bin/${DARWIN_AMD64_BINARY}
    - echo "Mock binary for ${LINUX_AMD64_BINARY}" > bin/${LINUX_AMD64_BINARY}
  artifacts:
    paths:
      - bin/

upload:
  stage: upload
  image: curlimages/curl:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - |
      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${DARWIN_AMD64_BINARY} "${PACKAGE_REGISTRY_URL}/${DARWIN_AMD64_BINARY}"
    - |
      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${LINUX_AMD64_BINARY} "${PACKAGE_REGISTRY_URL}/${LINUX_AMD64_BINARY}"

release:
  # Caution, as of 2021-02-02 these assets links require a login, see:
  # https://gitlab.com/gitlab-org/gitlab/-/issues/299384
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  rules:
    - if: $CI_COMMIT_TAG
  script:
    - |
      release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG \
        --assets-link "{\"name\":\"${DARWIN_AMD64_BINARY}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${DARWIN_AMD64_BINARY}\"}" \
        --assets-link "{\"name\":\"${LINUX_AMD64_BINARY}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${LINUX_AMD64_BINARY}\"}"
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.