[英]Set gitlab-ci.yml variable via bash command
variables:
CUSTOM_NODE_VERSION: '$${cat .nvmrc}'
我希望通過.nvmrc
文件(位於項目根目錄中)的內容來填充變量CUSTOM_NODE_VERSION
。 如何在gitlab-ci.yml
文件中做到這一點?
上面的例子不起作用。 我還嘗試了以下方法:
CUSTOM_NODE_VERSION: $(cat .nvmrc)
-> (cat .nvmrc)
CUSTOM_NODE_VERSION: "$(cat .nvmrc)"
-> (cat .nvmrc)
CUSTOM_NODE_VERSION: '$(cat .nvmrc)'
-> (cat .nvmrc)
CUSTOM_NODE_VERSION: ${cat .nvmrc}
->(空字符串)CUSTOM_NODE_VERSION: '${cat .nvmrc}'
-> (空字符串)CUSTOM_NODE_VERSION: "${cat .nvmrc}"
->(空字符串) 如果我將它放在before_script
中,它可以工作,如下所示:
before_script:
- CUSTOM_NODE_VERSION=$(cat .nvmrc)
但是gitlab-ci.yml
文件的以下部分無法訪問它:
lint:
stage: Test
image: node:$CUSTOM_NODE_VERSION
我還想在.gitlab-ci.yml
文件中使用版本字符串,但要將其附加到 Docker 映像名稱。 我是這樣做的:
build:
stage: build_images
script:
- API_VERSION=v$(grep -E -o "(version = )(.*)" pyproject.toml | cut -d\" -f2)
- echo $API_VERSION
# Build and push new images for staging.
- docker pull $API_STAGING:latest
- docker build --cache-from $API_STAGING:latest >-
-t $API_STAGING:latest >-
-t $API_STAGING:$CI_COMMIT_SHORT_SHA >-
-t $API_STAGING:$API_VERSION >-
-f dockerfiles/Dockerfile.staging .
- docker push $API_STAGING
tags:
- build
這里的關鍵是API_VERSION=v$(grep -E -o "(version = )(.*)" pyproject.toml | cut -d\" -f2)
。
說明:我試圖在pyproject.toml
中讀取的字符串類似於version = "0.17.1"
,我想要的結果是v0.17.1
v
只是我想添加到我的版本號的字符串-E
( --extended-regexp
) 調用grep
作為egrep
; 允許使用特殊的正則表達式字符-o
( --only-matching
)對我的用例沒有影響,但在其他情況下可能會有所幫助(我不確定)(version = )
和(.*)
:兩個捕獲組; 后者捕獲等號后空格后的任何內容$ grep -E -o "(version = )(.*)" pyproject.toml
將導致version = "0.1.0"
,所以我沒有使用捕獲組; 相反,我正在使用cut
cut
“剪切[s]文件每一行的選定部分”-d\"
將分隔符設置為雙引號而不是默認值(制表符)-f2
指定要返回的字段; 值 1 將返回第一個引號之前的所有內容,即version =
,因此 2 返回第二個引號之前和第一個引號之后的所有內容,並且 3 在此示例中不返回任何內容,因為沒有第三個雙引號分隔的字段echo $API_VERSION
只是為了看看它正在工作 .gitlab-ci.yml
的某些部分可以使用變量,而有些部分則不能使用。
.yml
文件在 Gitlab 本身中解析,然后由運行程序執行命令。 因此,此時無法設置作業配置中使用的變量。 您可以使用預定義的秘密變量,盡管這似乎不能滿足您的需求。
跟蹤您可以做什么和不能做什么的文檔存在問題:
您可能想嘗試:
before_script:
- export CUSTOM_NODE_VERSION=$(cat .nvmrc)
在您的腳本中使該變量可用於后續 shell。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.