GitLab CI/CD Variables 中文文檔

  • A+
所屬分類:自動化運維

Variables

官方文檔:https://docs.gitlab.com/ce/ci/variables/README.html

當GitLab CI 中接受到一個job后,Runner就開始準備構建環境。開始設置預定義的變量(環境變量)和用戶自定義的變量。

variables 的執行順序

變量可以被重寫,并且是按照下面的順序進行執行:

  1. Trigger variables(優先級最高)
  2. Secret variables
  3. YAML-defined?job-level variables
  4. YAML-defined?global variables
  5. Deployment variables
  6. Predefined variables?(優先級最低)

舉個例子,如果你定義了私有變量API_TOKEN=secure,并且在.gitlab-ci.yml中定義了?API_TOKEN=yaml,那么私有變量API_TOKEN的值將是secure,因為secret variables的優先級較高。

Predefined variables(Environment variables)

有部分預定義的環境變量僅僅只能在最小版本的GitLab Runner中使用。請參考下表查看對應的Runner版本要求。

注意:從GitLab 9.0 開始,部分變量已經不提倡使用。請查看9.0 Renaming部分來查找他們的替代變量。強烈建議使用新的變量,我們也會在將來的GitLab版本中將他們移除。

Variable GitLab Runner Description
CI all 0.4 標識該job是在CI環境中執行
CI_COMMIT_REF_NAME 9.0 all 用于構建項目的分支或tag名稱
CI_COMMIT_REF_SLUG 9.0 all 先將$CI_COMMIT_REF_NAME的值轉換成小寫,最大不能超過63個字節,然后把除了0-9a-z的其他字符轉換成-。在URLs和域名名稱中使用。
CI_COMMIT_SHA 9.0 all commit的版本號
CI_COMMIT_TAG 9.0 0.5 commit的tag名稱。只有創建了tags才會出現。
CI_DEBUG_TRACE 9.0 1.7 debug tracing開啟時才生效
CI_ENVIRONMENT_NAME 8.15 all job的環境名稱
CI_ENVIRONMENT_SLUG 8.15 all 環境名稱的簡化版本,適用于DNS,URLs,Kubernetes labels等
CI_JOB_ID 9.0 all GItLab CI內部調用job的一個唯一ID
CI_JOB_MANUAL 8.12 all 表示job啟用的標識
CI_JOB_NAME 9.0 0.5 .gitlab-ci.yml中定義的job的名稱
CI_JOB_STAGE 9.0 0.5 .gitlab-ci.yml中定義的stage的名稱
CI_JOB_TOKEN 9.0 1.2 用于同GitLab容器倉庫驗證的token
CI_REPOSITORY_URL 9.0 all git倉庫地址,用于克隆
CI_RUNNER_DESCRIPTION 8.10 0.5 GitLab中存儲的Runner描述
CI_RUNNER_ID 8.10 0.5 Runner所使用的唯一ID
CI_RUNNER_TAGS 8.10 0.5 Runner定義的tags
CI_PIPELINE_ID 8.10 0.5 GitLab CI 在內部使用的當前pipeline的唯一ID
CI_PIPELINE_TRIGGERED all all 用于指示該job被觸發的標識
CI_PROJECT_DIR all all 倉庫克隆的完整地址和job允許的完整地址
CI_PROJECT_ID all all GitLab CI在內部使用的當前項目的唯一ID
CI_PROJECT_NAME 8.10 0.5 當前正在構建的項目名稱(事實上是項目文件夾名稱)
CI_PROJECT_NAMESPACE 8.10 0.5 當前正在構建的項目命名空間(用戶名或者是組名稱)
CI_PROJECT_PATH 8.10 0.5 命名空間加項目名稱
CI_PROJECT_PATH_SLUG 9.3 all $CI_PROJECT_PATH小寫字母、除了0-9a-z的其他字母都替換成-。用于地址和域名名稱。
CI_PROJECT_URL 8.10 0.5 項目的訪問地址(http形式)
CI_REGISTRY 8.10 0.5 如果啟用了Container Registry,則返回GitLab的Container Registry的地址
CI_REGISTRY_IMAGE 8.10 0.5 如果為項目啟用了Container Registry,它將返回與特定項目相關聯的注冊表的地址
CI_REGISTRY_PASSWORD 9.0 all 用于push containers到GitLab的Container Registry的密碼
CI_REGISTRY_USER 9.0 all 用于push containers到GItLab的Container Registry的用戶名
CI_SERVER all all 標記該job是在CI環境中執行
CI_SERVER_NAME all all 用于協調job的CI服務器名稱
CI_SERVER_REVISION all all 用于調度job的GitLab修訂版
CI_SERVER_VERSION all all 用于調度job的GItLab版本
ARTIFACT_DOWNLOAD_ATTEMPTS 8.15 1.9 嘗試運行下載artifacts的job的次數
GET_SOURCES_ATTEMPTS 8.15 1.9 嘗試運行獲取源的job次數
GITLAB_CI all all 用于指示該job是在GItLab CI環境中運行
GITLAB_USER_ID 8.12 all 開啟該job的用戶ID
GITLAB_USER_EMAIL 8.12 all 開啟該job的用戶郵箱
RESTORE_CACHE_ATTEMPTS 8.15 1.9 嘗試運行存儲緩存的job的次數

9.0 Renaming

根據GitLab的命名規則,在9.0以后將從build術語轉到jobCI變量中,并且已經被重命名。

8.x name 9.0+ name
CI_BUILD_ID CI_JOB_ID
CI_BUILD_REF CI_COMMIT_SHA
CI_BUILD_TAG CI_COMMIT_TAG
CI_BUILD_REF_NAME CI_COMMIT_REF_NAME
CI_BUILD_REF_SLUG CI_COMMIT_REF_SLUG
CI_BUILD_NAME CI_JOB_NAME
CI_BUILD_STAGE CI_JOB_STAGE
CI_BUILD_REPO CI_REPOSITORY_URL
CI_BUILD_TRIGGERED CI_PIPELINE_TRIGGERED
CI_BUILD_MANUAL CI_JOB_MANUAL
CI_BUILD_TOKEN CI_JOB_TOKEN

.gitlab-ci.yaml?defined variables

注意:此功能要求GitLab Runner 0.5或者更高版本,并且GitLab CI 7.14或者更高版本

GitLab CI允許你向.gitlab-ci.yml中添加變量,這個變量在構建環境中設置。因此,變量將保存在存儲中,他們用于存儲非敏感的項目配置,例如:RAILS_ENV或者DATABASE_URL

舉個例子,如果將變量設置為全局以下(不是在一個作業中),則它將用于所有執行的命令腳本中:

YAML中定義的變量也將應用到所有創建的服務容器中,因此可以對它進行微調。

變量可以定義為全局,同時也可以定義為job級別。若要關閉作業中的全局定義變量,請定義一個空hash:

您可以在變量定義中使用其他變量(或使用$$將其轉義):

Secret variables

注意:

  • 這個功能需要GitLab Runner 0.4.0或者更高版本。
  • 請注意,私有變量不會隱藏,如果明確要這么做,他們的值可以顯示在job日志中。如果您的項目是公共的或內部的,你可以在項目的pipeline中設置pipeline為私有的。關于私有變量的討論在issue?*&####&*_16_*&####&*。

GitLab CI允許你在構建環境過程中設置項目的私有變量。私有變量存儲在倉庫(.gitlab-ci.yml)中,并被安全的傳遞給GitLab Runner,使其在構建環境中可用。建議使用該方法存儲諸如密碼、秘鑰和憑據之類的東西。

可用通過Settings ? Pipelines來增加私有變量,通過Settings ? Pipelines找到的模塊稱之為私有變量。

一次設置,所有的后續pipeline是都可以使用它們。

Protected secret variables

注意:此功能要求GitLab 9.3或者更高。

私有變量可以被保護。每當一個私有變量被保護時,它只會安全的傳遞到在受保護的分支受保護的標簽上運行的pipeline。其他的pipeline將不會得到受保護的變量。

可用通過Settings ? Pipelines來增加私有變量,通過Settings ? Pipelines找到的模塊稱之為私有變量,然后點擊Protected

一次設置,所有的后續pipeline是都可以使用它們。

Deploment variables

注意:此功能要求GitLab CI 8.15或者更高版本。

負責部署配置的項目服務可以定義在構建環境中設置自己的變量。這些變量只定義用于部署job。請參考您正在使用的項目服務的文檔,以了解他們定義的變量。

一個定義有部署變量的項目服務示例Kubernetes Service

Debug tracing

GitLab Runner 1.7開始引入。

警告:啟用調試跟蹤可能會嚴重的安全隱患。輸出內容將包含所有的私有變量和其他的隱私!輸出的內容將被上傳到GitLab服務器并且將會在job記錄中明顯體現。

默認情況下,GitLab Runner會隱藏了處理job時正在做的大部分細節。這種行為使job跟蹤很短,并且防止秘密泄露到跟蹤中,除非您的腳本將他們輸出到屏幕中。

如果job沒有按照預期的運行,這也會讓問題查找變得更加困難;在這種情況下,你可以在.gitlab-ci.yml中開啟調試記錄。它需要GitLab Runner v1.7版本以上,此功能可啟用shell的執行記錄,從而產生詳細的job記錄,列出所有執行的命令,設置變量等。

在啟用此功能之前,您應該確保job只對團隊成員可見。您也應該https://docs.gitlab.com/ce/ci/pipelines.html#seeing-build-status所有生成的job記錄,然后使其可見。

設置CI_DEBUG_TRACE變量的值為true來開啟調試記錄。

調試記錄設置為TRUE的截斷輸出示例:

Using the CI variables in your job scripts

在構建環境變量時,所有的變量都被設置為環境變量,他們可以使用普通方法訪問這些變量。在大多數情況下,用于執行job腳本都是通過bash或者是sh。

想要訪問環境變量,請示使用一下Runner對應的語法:

Shell 用法
bash/sh $variable
windows batch %variable%
PowerShell $env:variable

在bash中訪問環境變量,需要給變量名稱加上前綴($):

在Windows系統的PowerShell中訪問環境變量,需要給變量名稱加上前綴($env:):

您可以使用export命令來列出所有的環境變量。在使用此命令時要注意,此命令也會在job記錄中列出所有私有變量的值:

實例的值:

weinxin
微信公眾號
掃一掃關注運維生存時間公眾號,獲取最新技術文章~

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前評論:1   其中:訪客  1   博主  0

    • Fennay 0

      請注明來源,謝謝
      https://fennay.github.io/gitlab-ci-cn/variables.html