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",所以我没有使用捕获组;相反,我正在使用cutcut“剪切出文件每行的选定部分”-d\"将分隔符设置为双引号而不是默认值(制表符)-f2指定要返回的字段;值 1 将返回第一个引号之前的所有内容,即 ,version = 因此 2 返回第二个引号之前和第一个引号之后的所有内容,而 3 在此示例中不返回任何内容,因为没有第三个双引号分隔的字段echo $API_VERSION只是为了看看它是否有效变量的某些部分可用.gitlab-ci.yml,而某些部分则不可用。
该.yml文件在 Gitlab 本身中进行解析,然后由运行器执行命令。因此,此时无法设置作业配置中使用的变量。您可以使用预定义的秘密变量,尽管这似乎不能满足您的需求。
跟踪您可以做什么和不能做什么的文档时存在问题:
小智 7
您可能想尝试:
before_script:
- export CUSTOM_NODE_VERSION=$(cat .nvmrc)
Run Code Online (Sandbox Code Playgroud)
在您的脚本中使该变量可用于后续 shell。