簡體   English   中英

通過 bash 命令設置 gitlab-ci.yml 變量

[英]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.

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