環(huán)境變量
環(huán)境變量是實(shí)現(xiàn)流水線過程定制化的一種常見方法,可以在流水線的任何階段使用。本文介紹流水線環(huán)境變量,包括內(nèi)置變量、自定義變量、通用變量組,以及如何在流水線中使用變量。
環(huán)境變量來源
內(nèi)置變量
云效流水線提供流水線基本信息、代碼源相關(guān)內(nèi)置變量,幫助定制化流程,可按需直接使用。
功能模塊 | 環(huán)境變量名 | 說明 |
基本信息 | PIPELINE_ID | 流水線 ID |
BUILD_NUMBER | 流水線的運(yùn)行編號(hào),從1開始,按自然數(shù)自增 | |
PIPELINE_NAME | 流水線名稱,如:前端項(xiàng)目發(fā)布 | |
BUILD_REMARK | 流水線運(yùn)行備注 | |
BUILD_EXECUTOR | 流水線觸發(fā)人,如:張三 | |
BUILD_MESSAGE | 流水線觸發(fā)信息,如:張三·頁面手動(dòng)觸發(fā) | |
PROJECT_DIR | 運(yùn)行命令的工作目錄,如:/root/workspace/1084-abc_docker-08191_b0wE | |
DATETIME | 當(dāng)前時(shí)間,如:2017-06-22-23-26-33 | |
TIMESTAMP | 當(dāng)前時(shí)間戳,如:1581581273232 | |
代碼源(單個(gè)) | CI_SOURCE_NAME | 代碼源名稱 |
CI_COMMIT_REF_NAME | 代碼源的分支名或者 Tag 名(根據(jù)用戶運(yùn)行時(shí)選擇),如:master or V1.0 | |
CI_COMMIT_TITLE | 最后一次提交的提交信息 | |
CI_COMMIT_SHA | 最后一次提交的代碼版本的 commit ID:如2bfb63d779e3648c91950f82d374a25784cdabaf | |
CI_COMMIT_ID | 最后一次提交的代碼版本的 8 位 commit ID(Git場景) 最后一次提交的代碼版本的 Revision(SVN場景) | |
代碼源 (多個(gè)) | CI_SOURCE_NAME_n | 第n個(gè)代碼源名稱 |
CI_COMMIT_REF_NAME_n | 第n個(gè)代碼源的分支名或者 Tag 名(根據(jù)用戶運(yùn)行時(shí)選擇),如:master or V1.0 | |
CI_COMMIT_TITLE_n | 第n個(gè)代碼源的最后一次提交的提交信息 | |
CI_COMMIT_SHA_n | 第n個(gè)代碼源的最后一次提交的代碼版本的 commit ID:如2bfb63d779e3648c91950f82d374a25784cdabaf | |
CI_COMMIT_ID_n | 第n個(gè)代碼源的最后一次提交的代碼版本的 8 位 commit ID | |
制品源 | CI_SOURCE_NAME | 制品源名稱 |
CI_SOURCE_URL | 制品源地址,如:https://packages.aliyun.com/generic/flow_generic_repo/artifacts?artifactName=Artifacts_2778530&version=2024-01-05-16-28-23 | |
CI_VERSION_NAME | 制品源的版本號(hào)名(根據(jù)用戶運(yùn)行時(shí)選擇),如:2024-01-05-16-28-23 |
當(dāng)流水線配置了多個(gè)代碼源或制品源時(shí),不同代碼源或制品源信息可以通過變量名+數(shù)字后綴(第n個(gè)代碼源)獲取。下圖環(huán)境變量依次為:第1個(gè)源,Git類型代碼源環(huán)境變量;第2個(gè)源,制品源環(huán)境變量;第3個(gè)源,SVN類型代碼源環(huán)境變量。
自定義變量
除了流水線內(nèi)置變量外,云效Flow還支持用戶自定義流水線變量,用于滿足更多定制化場景。流水線內(nèi)自定義變量生效范圍僅限本流水線。選中流水線,點(diǎn)擊編輯,點(diǎn)擊變量和緩存。云效Flow支持字符串和枚舉兩種類型變量。
字符變量
在流水線變量和緩存 > 字符變量處,單擊 新建變量,打開新建變量彈窗。
輸入變量名稱和默認(rèn)值,可以設(shè)置私密模式和運(yùn)行時(shí)設(shè)置。
變量名稱:注意環(huán)境變量名稱不可使用橫杠符號(hào) - 。
私密模式:控制變量是否對(duì)外公開。當(dāng)變量設(shè)置為私密模式后,將無法查看變量的值,相應(yīng)的執(zhí)行日志中也不會(huì)顯示。通常適用于用戶名,密碼等私密信息場景。
運(yùn)行時(shí)設(shè)置:控制變量值是否需要在流水線運(yùn)行時(shí)設(shè)置。當(dāng)變量設(shè)置為運(yùn)行時(shí)設(shè)置后,流水線運(yùn)行時(shí)需要設(shè)置變量的值。通常適用于需要?jiǎng)討B(tài)配置流水線參數(shù)值場景。
可以添加更多變量,也可以刪除變量。
單擊添加后,需要保存流水線才可以將變量保存至流水線。保存完畢后即可按場景 使用環(huán)境變量。
運(yùn)行選擇變量
在流水線變量和緩存 > 運(yùn)行選擇變量處,單擊 新建變量,打開新建變量彈窗。
輸入變量名稱和選項(xiàng)。
單擊添加選項(xiàng)可以為變量取值添加多個(gè)選項(xiàng)。
選項(xiàng)打開默認(rèn)值則該選項(xiàng)為該變量的默認(rèn)取值。
單擊添加后,需要保存流水線才可以將變量保存至流水線。保存完畢后即可按場景 使用環(huán)境變量。
在流水線點(diǎn)擊運(yùn)行時(shí)需要選擇變量取值。
通用變量組
通用變量組是企業(yè)統(tǒng)一管控的通用環(huán)境變量,用企業(yè)統(tǒng)一管理。流水線可以關(guān)聯(lián)通用變量組使用。
在流水線變量和緩存 > 通用變量組處,單擊 關(guān)聯(lián)變量組,下拉選擇變量組,單擊 確定 即可關(guān)聯(lián)變量組到本流水線。
在流水線通用變量組處可以查看流水線關(guān)聯(lián)的通用變量組,可以查看變量組詳情,可以解除變量組關(guān)聯(lián)。保存完畢后即可按場景 使用環(huán)境變量。
使用環(huán)境變量
上述變量定義好后,可在流水線任意需要使用環(huán)境變量的地方通過${XXX}
引用變量。變量生效邏輯如下:
變量優(yōu)先級(jí):步驟輸出變量 > 流水線運(yùn)行時(shí)輸入變量 > 流水線變量 > 通用變量組。
同一流水線關(guān)聯(lián)多個(gè)通用變量組,變量組中變量名稱重復(fù)的,以后關(guān)聯(lián)的變量組取值為準(zhǔn)。
以下舉幾個(gè)典型的使用環(huán)境變量場景,如執(zhí)行命令、主機(jī)部署、鏡像構(gòu)建參數(shù)、配置文件參數(shù)、環(huán)境變量傳遞等使用環(huán)境變量場景。
執(zhí)行命令使用變量
將配置文件a.conf
中的 key 的參數(shù)值,從123
更改為變量名稱為abc
的環(huán)境變量值。
主機(jī)部署使用變量
可以在部署腳本中直接通過${XXX}
引用環(huán)境變量控制主機(jī)部署邏輯。運(yùn)行流水線后,在主機(jī)部署步驟的日志中查看。
鏡像構(gòu)建參數(shù)使用變量
鏡像構(gòu)建時(shí)如需使用流水線環(huán)境變量作為構(gòu)建參數(shù),則可按照以下方式進(jìn)行配置。
在鏡像構(gòu)建步驟中使用默認(rèn)構(gòu)建環(huán)境,在構(gòu)建參數(shù)中添加自定義參數(shù),通過
${XXX}
形式將環(huán)境變量賦值給構(gòu)建參數(shù)。構(gòu)建參數(shù)會(huì)以--build-arg
的形式傳遞到build命令的參數(shù)中。
在 Dockerfile 中,通過
ARG argName
引用變量。
配置文件參數(shù)使用變量
如果您的配置文件中某個(gè)參數(shù),需要通過環(huán)境變量進(jìn)行修改,例如:代碼庫配置文件a.conf
中有參數(shù)username
,希望用流水線的環(huán)境變量進(jìn)行替換,則可按照以下方式進(jìn)行配置。
修改配置文件
a.conf
中內(nèi)容username = ${abc}
。將
abc
的參數(shù)值配置在流水線的環(huán)境變量中,默認(rèn)值設(shè)置為my_name_is_hanmeimei
。在流水線中添加任務(wù),在工具中找到并添加替換文件中的環(huán)境變量 步驟,填寫配置文件的源文件路徑。目標(biāo)文件路徑非必填(如果填寫了目標(biāo)文件路徑,則會(huì)生成一個(gè)新的配置文件;不填寫則直接修改原文件)。
查看修改效果如下:
a.conf
中的username
被修改為b.conf
中的my_name_is_hanmeimei
。注意:因?yàn)?Flow 流水線同一個(gè)任務(wù)才會(huì)共享工作區(qū),因此修改配置文件變量步驟需要和您后續(xù)使用配置文件的步驟放在該流水線的同一個(gè)任務(wù)中。
環(huán)境變量傳遞
在流水線配置頁定義的環(huán)境變量為預(yù)置的固定環(huán)境變量,在流水線實(shí)際運(yùn)行過程中,會(huì)出現(xiàn)以流水線運(yùn)行時(shí)的輸出定義的環(huán)境變量,并將其傳遞給后續(xù)的步驟或任務(wù)中使用的場景。對(duì)應(yīng)場景有以下兩種:
任務(wù)內(nèi)環(huán)境變量傳遞:步驟一生成自定義環(huán)境變量 -> 步驟二使用。
任務(wù)間環(huán)境變量傳遞:任務(wù)一生成環(huán)境變量 -> 任務(wù)二使用。
值得注意的是,在使用不同構(gòu)建環(huán)境時(shí)需要使用不同的語法。
默認(rèn)環(huán)境
任務(wù)內(nèi)環(huán)境變量傳遞
這種場景主要是單個(gè)任務(wù)節(jié)點(diǎn)內(nèi)的環(huán)境變量共享,比如步驟一生成變量USER_abc=123,步驟二通過 ${USER_abc} 引用。
您可以在前序步驟中通過echo 'USER_abc=123' > .env
將環(huán)境變量輸出到.env
中完成環(huán)境變量注入。注意:在.env文件中的環(huán)境變量需要以USER_開頭。
任務(wù)間環(huán)境變量傳遞
這種場景主要是流水線內(nèi)多個(gè)任務(wù)節(jié)點(diǎn)之間的環(huán)境變量共享,比如任務(wù)一生成變量 USER_abc=123,任務(wù)二通過 ${USER_abc} 引用。
您可以在任務(wù)一的步驟中通過將環(huán)境變量輸出到
.env
中完成環(huán)境變量注入。在任務(wù)一中添加步驟-選擇工具中的“設(shè)置變量”,將環(huán)境變量設(shè)置為流水線級(jí)別的環(huán)境變量。
在任務(wù)二中通過 ${USER_abc} 使用該環(huán)境變量。
指定容器環(huán)境或默認(rèn)VM環(huán)境
任務(wù)內(nèi)環(huán)境變量傳遞
這種場景主要是單個(gè)任務(wù)節(jié)點(diǎn)內(nèi)的環(huán)境變量共享,比如步驟一生成變量 yaojia_Test=myParam,步驟二通過 ${yaojia_Test} 引用。
您可以在前序步驟中通過echo "yaojia_Test=myParam" >> "$FLOW_ENV"
將環(huán)境變量輸出到$FLOW_ENV
中完成環(huán)境變量注入。
任務(wù)間環(huán)境變量傳遞
這種場景主要是流水線內(nèi)多個(gè)任務(wù)節(jié)點(diǎn)的環(huán)境變量共享,比如任務(wù)一生成變量 yaojia_Test=myParam,任務(wù)二通過 ${yaojia_Test} 引用。
您可以在任務(wù)一的步驟中通過將環(huán)境變量輸出到
$FLOW_ENV
中完成環(huán)境變量注入。在任務(wù)一中添加步驟-選擇工具中的“批量設(shè)置變量”,將環(huán)境變量設(shè)置為流水線級(jí)別的環(huán)境變量。
在任務(wù)二中通過 ${yaojia_Test} 使用該環(huán)境變量。