Gitlab CI CD变量在运行Gitlab流水线时未被注入

18
我正在gitlab-ci.yml文件中运行以下代码部分:

我正在gitlab-ci.yml文件中运行以下代码部分:

  script:
- pip install --upgrade pip
- cd ./TestAutomation
- pip install -r ./requirements.txt

以下是键和值。因此,我必须将任何值作为变量传递到管道中的密钥

我已通过展开它们将所有上述三个变量添加到GitLab CI CD变量部分中。只需添加一个单一值以及键

我还发现我们可以在.yml文件中自行添加变量,如下所示。我不确定如何为一个键添加多个值

variables:
 TEST:
   value: "some value" # this would be the default value
   description: "This variable makes cakes delicious"
当我运行管道时,出现了错误,看起来这些变量和值没有被正确注入。
更多细节:
当我运行管道时,我遇到了同样的错误。因此我的怀疑是,在通过管道运行时,类别变量没有被正确注入。
如果需要,我可以在共享屏幕上展示它。
请查看附加的gitlab-ci.yml文件的图像片段 - [![enter image description here][1]][1]
在运行管道时,我传递了以下参数 - [![enter image description here][2]][2]
我观察到的是,与我传递的键相关联的值或变量的值没有被注入或替换,而不是键被替换。因此,理论上 ${Category} 应该被替换为 smoke等值。

我有点困惑你想做什么。你是想用稍微不同的变量多次运行同一个作业吗?如果是这样,请查看GitLab CI参考中的“parallel: matrix”。你是想在手动运行CI/CD流水线并输入变量值时显示下拉菜单吗?目前还不可能。 - Patrick
@Patrick,我正在尝试通过传递任何单个值来运行管道。我想将ENV、BROWSER和Category作为键值传递。当我传递所有3个键值并运行管道时,我会收到错误提示。当我没有传递Category键值时,在本地运行时也会出现相同的错误提示,因此看起来它没有被正确注入。我只想运行一次作业,而不是多次。 - simond
请您更新您的帖子,包括完整的工作和变量定义,而不仅仅是片段?我们需要能够重现您的问题,这在部分代码中很困难。 - Patrick
请问您能否发布完整的yml文件? - Damith Udayanga
Patrick,Damith Udayanga,我已经粘贴了完整的文件。 - simond
3个回答

19
当Gitlab CI CD变量未注入到流水线环境变量中时,请按以下步骤验证:
  1. 检查变量是否已定义。您需要为用户设置至少Maintainer角色。转到“设置”->“CI/CD”->“变量”。您可以看到所有项目变量和组变量(继承)。

  2. 接下来,检查这些变量是否被定义为保护变量。如果它们被标记为受保护,则仅暴露给受保护的分支或受保护的标签。如果当前分支不是受保护分支,建议取消选中此项。如果没有,则始终可以将当前分支变为受保护分支。 enter image description here

  3. 接下来,检查您的代码是否正确访问环境变量。根据您的脚本语言,只需像访问常规环境变量一样访问即可。

  4. 您实际上不需要在.gitlab-ci.yaml文件中定义这些变量。(即使他们的文档是这么说的)。

希望这有所帮助。

14

在GitLab UI中设置的变量不会传递到服务容器。要设置它们,请将其分配给UI中的变量,然后在您的.gitlab-ci.yml文件中重新分配它们:

stages:
  - Test
# Added this to your yml file
variables:
  ENV: $ENV
  BROWSER: $BROWSER
  Category: $Category

ui_tests:
  stage: Test
  image: 
    name: joyzourky/python-chromedriver:3.8
    entrypoint: [""]
  tags:
  - micro
  only:
  - develop
  when: manual
  script:
    - pip install --upgrade pip 
    - cd ./src/Tests/UIAutomation
    - pip install -r ./requirements.txt
    - pytest -s -v --env=${ENV} --browser=${BROWSER} --alluredir=./reports ./tests -m ${Category}
  artifacts:
    when: always
    path:
    - ./src/Tests/UIAutomation/reports/
    - ./src/Tests/UIAutomation/logs/
    expire_in: 1 day


请参考附件,它可以在任何情况下正常工作。 在这里输入图片描述

让我检查并确认一下。 - Damith Udayanga
嗨,西蒙德,它正在运行,没有任何问题。 - Damith Udayanga
3
添加更多的要点:- 在我的情况下,variables关键字并不是必需的,变量在我的作业中是可用的。- 如果这些变量是受保护的,它们将不会在您的合并请求事件中可用。 - ssi-anik
6
很抱歉,这个答案是不正确的。项目变量确实会传递到容器中,不需要进行自我赋值操作。更可能是像 ssi-anik 所说的问题是“保护”问题。 - Andreas H.
4
如果选中了“保护变量”,则只能由受保护的分支和标签使用。请阅读此文档 https://docs.gitlab.com/ee/ci/variables/index.html#protected-cicd-variables - Ishtiyaq Husain
显示剩余4条评论

6

正如@Keet Sugathadasa所提到的,触发CI的分支必须受到保护;这也是我的情况,因此我必须通过进入设置 > 存储库 > 受保护分支来保护该分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接