variables:
CUSTOM_NODE_VERSION: '$${cat .nvmrc}'
我希望通过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)
但是gitlab-ci.yml
文件的以下部分无法访问它:
lint:
stage: Test
image: node:$CUSTOM_NODE_VERSION
答案 0 :(得分:4)
.gitlab-ci.yml
的某些部分可以使用变量,有些部分则不可用。
在Gitlab本身解析.yml
文件,然后由跑步者执行命令。因此,此时无法设置作业配置中使用的变量。您可以使用预定义的秘密变量,但这似乎无法满足您的需求。
有些问题需要跟踪文档中您可以做什么和不能做什么:
答案 1 :(得分:1)
我还想在 .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
只是为了看看它是否有效