簡體   English   中英

在 GitLab 中的 CI 文件外檢索 CI 變量

[英]Retrieving a CI variable outside the CI file in GitLab

我想使用 GitLab 中的預定義變量(例如 CI_COMMIT_AUTHOR)來檢索和使用項目信息。

我想在 .gitlab-ci.yml 文件之外使用該變量。

我正在編寫一個模板,所以當它被使用時,文件應該重新填充正確的信息。

例如,模板包含一個.yaml文件

apiVersion: sample.io/v1alpha1
kind: Component
metadata:
  name: #said team app"my_awesome_app"
  description: #description of app
  annotations:
    backstage.io/techdocs-ref: dir:.
spec:
  type: documentation
  lifecycle: experimental
  owner: $CI_COMMIT_AUTHOR

如果要在.gitlab-ci.yml之外使用Gitlab變量,實現方法是通過Gitlab API查詢

但不幸的是,對於 Gitlab predefined變量,似乎不存在用於檢索它們的 API

我的建議是在你的 gitlab-ci.yml 中創建一個包含你需要的所有變量的文件。 將其存儲為工件並通過 Gitlab API 檢索工件

為了實現這一點,首先向您的 gitlab yml 添加一個作業,它將預定義的變量存儲在一個工件中,例如

store_predefined_variables:
  ...
  script:
    - touch variables.txt
    - echo "CI_COMMIT_AUTHOR=$CI_COMMIT_AUTHOR" >> variables.txt
  artifacts:
     paths:
       - ./variables.txt

接下來檢索名為store_predefined_variables https://docs.gitlab.com/ee/api/jobs.html#list-project-jobs的作業的id

GET /projects/:id/jobs

最后,使用job id檢索包含所有所需變量https://docs.gitlab.com/ee/api/job_artifacts.html#get-job-artifacts的工件

GET /projects/:id/jobs/:job_id/artifacts

結合使用jq命令的兩個 API 調用 abd,我們可以得到一個單行程序,它檢索名稱為store_predefined_variables的最新作業的工件。 工件下載為artifacts.zip

wget -U "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.17 (KHTML,like Gecko) Ubuntu/11.04 Chromium/11.0.654.0 Chrome/11.0.654.0 Safari/534.17" --header "PRIVATE-TOKEN: <access_token>" "https://gitlab.com/api/v4/projects/<project_id>/jobs/$(curl -s  --header "PRIVATE-TOKEN: <access_token>" "https://gitlab.com/api/v4/projects/<project_id>/jobs" | jq '[.[] | select(.name=="store_predefined_variables")] | .[0].id')/artifacts" -O artifacts.zip

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM