通过bash命令设置gitlab-ci.yml变量

Kar*_*son 12 bash gitlab-ci

variables:
  CUSTOM_NODE_VERSION: '$${cat .nvmrc}'
Run Code Online (Sandbox Code Playgroud)

我希望CUSTOM_NODE_VERSION通过.nvmrc文件的内容(位于项目根目录中)填充变量.如何在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)
Run Code Online (Sandbox Code Playgroud)

但是gitlab-ci.yml文件的以下部分无法访问它:

lint:
  stage: Test
  image: node:$CUSTOM_NODE_VERSION
Run Code Online (Sandbox Code Playgroud)

ace*_*one 10

我还想在.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
Run Code Online (Sandbox Code Playgroud)

这里的关键是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) 调用grepas egrep;允许使用特殊的正则表达式字符
  • -o( --only-matching) 在我的用例中没有什么区别,但在其他情况下可能会有帮助(我不确定)
  • (version = )(.*):两个捕获组;后一个捕获等号后空格之后的任何内容
  • 运行只会$ grep -E -o "(version = )(.*)" pyproject.toml导致version = "0.1.0",所以我没有使用捕获组;相反,我正在使用cut
  • cut“剪切出文件每行的选定部分”
  • -d\"将分隔符设置为双引号而不是默认值(制表符)
  • -f2指定要返回的字段;值 1 将返回第一个引号之前的所有内容,即 ,version = 因此 2 返回第二个引号之前和第一个引号之后的所有内容,而 3 在此示例中不返回任何内容,因为没有第三个双引号分隔的字段
  • echo $API_VERSION只是为了看看它是否有效


Ste*_*tel 7

变量的某些部分可用.gitlab-ci.yml,而某些部分则不可用。

.yml文件在 Gitlab 本身中进行解析,然后由运行器执行命令。因此,此时无法设置作业配置中使用的变量。您可以使用预定义的秘密变量,尽管这似乎不能满足您的需求。

跟踪您可以做什么和不能做什么的文档时存在问题:


小智 7

您可能想尝试:

before_script:
  - export CUSTOM_NODE_VERSION=$(cat .nvmrc)
Run Code Online (Sandbox Code Playgroud)

在您的脚本中使该变量可用于后续 shell。