首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过bash命令设置gitlab-ci.yml变量

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

Stack Overflow用户
提问于 2018-02-28 10:01:45
回答 3查看 24K关注 0票数 28
代码语言:javascript
复制
variables:
  CUSTOM_NODE_VERSION: '$${cat .nvmrc}'

我希望通过.nvmrc文件(位于项目根目录中)的内容填充变量.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中,如下所示:

代码语言:javascript
复制
before_script:
  - CUSTOM_NODE_VERSION=$(cat .nvmrc)

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

代码语言:javascript
复制
lint:
  stage: Test
  image: node:$CUSTOM_NODE_VERSION
EN

回答 3

Stack Overflow用户

发布于 2021-01-25 21:31:52

我还想在.gitlab-ci.yml文件中使用版本字符串,但将其附加到Docker映像名中。我就是这样做的:

代码语言:javascript
复制
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;允许使用特殊的regexp字符
  • -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只是为了看看它是否起作用
票数 6
EN

Stack Overflow用户

发布于 2018-02-28 18:35:43

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

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

跟踪您可以做和不能做的事情的文档有一些问题:

票数 5
EN

Stack Overflow用户

发布于 2022-06-15 00:05:27

你可能想试试:

代码语言:javascript
复制
before_script:
  - export CUSTOM_NODE_VERSION=$(cat .nvmrc)

在您的脚本中,使变量对后续shell可用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49026724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档