Gitlab CI 中的管道之间无法共享变量

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

我已经尝试了很多不同的变体,但没有任何措辞适合我。

这是 gitlab.ci 项目的示例代码:

cache:
  key: $CI_COMMIT_REF_SLUG

publish_image:
  stage: publish-image
  only: [ dev ]
  variables: 
    IMAGE_TAG: $CI_COMMIT_SHORT_SHA
  script:
    - echo "IMAGE_TAG=$CI_COMMIT_SHORT_SHA" > $CI_PROJECT_DIR/data.txt
  artifacts:
    paths:
      - $CI_PROJECT_DIR/data.txt

retag_image_stg:
  stage: retag-image-stg
  only: [ stg ]
  script:
    - echo $IMAGE_TAG
    - ls -lah
    - pwd
    - cat $CI_PROJECT_DIR/data.txt
    - cat data.txt 

缓存工件在下一个管道中不可访问。

API无法使用 - 如果我指示项目和作业 ID,我可以下载工件,但是这个变量每次都会更改,因此要从第一个管道获取工件,我需要首先与不可能的 ID 共享变量。

我心中唯一的建议是以某种方式使用 GIT 中的不同分支来存储工件并检索它们。

continuous-integration gitlab-ci gitlab-ci-runner cicd gitlab-api
1个回答
1
投票

我在Gitlab中找到了3种在管道之间共享变量的解决方案:

  1. 使用 git 中的某个分支来存储这些变量。

    • git clone -b artifacts-branch --single-branch https://$GIT_USER:[电子邮件受保护]
    • cd 到你的 git 文件夹中
    • 回显“$CI_COMMIT_SHORT_SHA”> image_tag
    • git 添加图像_标签
    • git config --global user.email“你的邮件”
    • git config --global user.name“你的名字”
    • git commit -m“消息”
    • git 推送
  2. 在 Gitlab 中使用 API 调用 PUSH 和 PULL 变量

    curl --request PUT --header "PRIVATE-TOKEN: token" --data "value=123" "https://your.gitlab-site.com/api/v4/projects/projectID/variables/TEST_ENV"

    curl --request GET --header "PRIVATE-TOKEN: token" "https://your.gitlab-site.com/api/v4/projects/projectID/variables/TEST_ENV" | jq -r '.value'

  3. 或者使用 gitlab runner 的 shell 执行器将值直接存储在服务器上的文件中。

© www.soinside.com 2019 - 2024. All rights reserved.