【问题标题】:Gitlab execute stage conditionallyGitlab有条件地执行阶段
【发布时间】:2017-02-20 15:49:03
【问题描述】:

有 3 个阶段 - 在.gitlab-ci.yml 中构建、测试和部署。

需要运行每晚的回归测试阶段 - 好吧nightly :)

这是相关的.gitlab-ci.yml 代码:

stages:
  - build
  - test
  - deploy

build_project:
  stage: build
  script:
    - cd ./some-dir
    - build-script.sh
  except:
  - tags

#Run this only when say variable 'NIGHTLY_TEST == True'. But HOW?
nightly_regression_test_project:
  stage: test
  script:
    - cd ./some-dir
    - execute test-script

每天标记到only 运行test 阶段是不可取的。

还有什么想法吗?

【问题讨论】:

  • posted 带有屏幕截图和示例的答案。希望有帮助
  • 这是一个关于管道“调度”的问题,而不是真正关于管道阶段“条件”执行的问题。

标签: git gitlab gitlab-ci


【解决方案1】:

我刚刚按照here 找到的示例实现了这个“功能” 使用 crontab 和 curl(我使用 Linux,因为为什么不呢?)来触发运行你的夜间测试。

30 0 * * * curl --request POST --form token=TOKEN --form ref=master https://gitlab.example.com/api/v3/projects/9/trigger/builds

【讨论】:

    【解决方案2】:

    目前没有办法根据环境变量运行作业(您始终可以打开功能请求!)。不过,如果环境变量不存在,您可以使用简单的 Bash 命令立即退出。

    类似:

    stages:
      - build
      - test
      - deploy
    
    build_project:
      stage: build
      script:
        - cd ./some-dir
        - build-script.sh
      except:
      - tags
    
    # Run this only when NIGHTLY_TEST environment variable exists.
    nightly_regression_test_project:
      stage: test
      script:
        - [ -z "$NIGHTLY_TEST" ] && exit 1;
        - cd ./some-dir
        - execute test-script
    

    如果变量不存在,则后面的测试将不会运行。否则,他们会的。

    希望有帮助!

    【讨论】:

    • 如果您不希望 nightly_regression_test_project 作业失败整个管道,您可以使用 exit 0 而不是 exit 1:作业将终止,但管道将继续跨度>
    • 需要引用 "[ -z '$NIGHTLY_TEST' ] && exit 1;"
    【解决方案3】:

    如果有人现在正在寻找这个,gitlab 现在已经实现了一个带有变量覆盖的计划构建功能(非常方便)。发现文档here

    对于在给出此答案时对此功能的说明感兴趣的任何人,这里是:

    使用管道计划

    为了安排管道:

    1. 导航到您项目的Pipelines -> Schedules,然后点击New Schedule按钮。
    2. 填写表格
    3. 点击保存管道计划以使更改生效。

    我最喜欢的功能是预定管道变量。

    变量文档可以在here找到,但对我来说最有用的信息是优先级,我将在这里重新输入:

    变量的优先级

    变量可以被覆盖,它们按以下顺序优先:

    1. 触发变量或计划管道变量(优先于所有)
    2. 项目级秘密变量或受保护的秘密变量
    3. 组级秘密变量或受保护的秘密变量
    4. YAML 定义的作业级变量
    5. YAML 定义的全局变量
    6. 部署变量
    7. 预定义变量(位于链中最低的变量)

    希望这会有所帮助。我很高兴他们添加了此功能。

    【讨论】:

    • 如果你真的可以把一些东西放在一起回答自己,那么参考文档会很方便
    • 我想过这样做,但我担心下个月左右说明会发生变化。我会回去为当前方法添加说明,希望他们不要更改它:)
    • 文档没有帮助。它展示了如何设置变量,并展示了如何使用 onlyexcept 进行调度,但没有展示如何使用 onlyexcept WITH 变量。应该使用什么语法?
    【解决方案4】:

    exceptonly 可以指定将触发它们的变量。

    您可以在 .gitlab-ci.yml 中使用以下内容:

    build1:
      stage: build
      script:
        - echo "Only when NIGHTLY_TEST is false"
      except:
        variables:
          - $NIGHTLY_TEST 
    
    test1:
      stage: test
      script: 
        - echo "Only when NIGHTLY_TEST is true"
      only:
        variables:
          - $NIGHTLY_TEST 
    

    【讨论】:

    • 注意:您不能只保留变量未设置。它必须具有值true(全部小写)
    • 有哪些可能的方式来定义 NIGHTLY_TEST 变量?
    • @DiegoMarin 一种方法是从设置 > CI / CD > 变量。另一个将使用时间表 (stackoverflow.com/a/59503715/3498950)
    【解决方案5】:

    选择 CI/CD -> 项目左侧框架中的计划:

    创建一个新的计划:

    添加您的NIGHTLY_TEST 变量并将其设置为True

    onlyvariables 部分添加到您的gitlab-ci.yml 文件中:

        nightly_regression_test_project:
          stage: test
          script:
            - cd ./some-dir
            - execute test-script
          only:
            variables:
              - $NIGHTLY_TEST == "True"
    

    -- 更新-- 使用新的基于规则的逻辑,您可以这样做:

        nightly_regression_test_project:
          stage: test
          script:
            - cd ./some-dir
            - execute test-script
          rules:
            - if: $NIGHTLY_TEST == "True"
              when: always
    

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2020-11-27
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多