gitlab-ci - 如何让 gitlab CI 作业仅在分支上手动触发并始终在 master 上自动触发?

标签 gitlab-ci

我有一个页面作业,我想在分支上手动运行,但在 master 上自动触发:

pages:
  stage: deploy
  cache:
    paths:
      - public
  script:
    - scripts/pages.sh
  artifacts:
    paths:
      - public
    expire_in: 2 days

所以我想要一个组合:
  only:
    - master
  when: always
  only:
    - branches
  except:
    - master
  when: manual

那可能吗?

最佳答案

如果您使用 GitLab CI rules,这应该可以做到.这是一个 shell 是 powershell 的示例,它显示当前时间和分支/标签名称:

pages:
  script:
    - mkdir public
    - date > public\index.html
    - $CI_COMMIT_REF_NAME >> public\index.html
  artifacts:
    paths:
      - public
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: always
    - if: '$CI_COMMIT_BRANCH == null'
      when: never
    - when: manual

GitLab 从上到下匹配每个单独的规则。如果分支名为“master”,则作业将标记为 when: always .如果分支名称为空,则这是一个标记,并且作业标记为从不。如果这不是名为 master 的分支,也不是标签,这是一个普通的分支,作业用manual打上标记。

正如 Aleksey Tsalolikhin 所述,您可以删除此规则:
    - if: '$CI_COMMIT_BRANCH == null'
      when: never

然后,您还可以选择为您的标签运行管道,如下所示:

Rules for manual job for both tags and branches, except master branch

如果这是你想要的,那取决于你。

关于gitlab-ci - 如何让 gitlab CI 作业仅在分支上手动触发并始终在 master 上自动触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55398771/

相关文章:

environment-variables - gitlab CI 中缺少 .env 文件

ssh - Gitlab CI - 在 Bash 中设置 SSH key

php - 适用于 Laravel 5.* 的 Gitlab CI

docker - 在Gitlab CI/CD中,如何提交和发布正在运行我们阶段的docker容器

java - 如何检测测试是否在 GitLab CI 服务器上运行

gitlab runner 请求的URL返回错误: 403

angularjs - 使用GitLab CI通过ftp部署应用

gitlab - 如何在gitlab ci/cd中组合规则

gitlab - 使用 Gitlab 注册表中的私有(private) Docker 镜像作为 CI 的基础镜像

docker - 从 Docker gitlab CI 在 Verdaccio 上发布 npm 模块