我有一个计划的管道,每天一次将一些数据从一台服务器复制到另一台服务器。
管道在所有分支上都可以正常工作,但如果我选择 master
分支(默认分支)作为 target branch
,则不会启动。
我已经尝试过 master
的精确副本并且效果很好。
我认为这可能是因为 master
受保护,但我尝试使用受保护的 master 副本并且它有效。
我真的不确定发生了什么。当我单击计划管道旁边的“播放”按钮时,它说作业已成功调度,但我在作业列表中看不到任何作业。
这里有关于 .gitlab-ci.yml
的一些细节
stages:
- copy_data
- linting
- test
- deploy
lint:
needs: []
stage: linting
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH'
changes:
- "my_project/**/*.py"
script:
- ...
test:
stage: test
script:
- ...
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH'
copy_database:on-schedule:
stage: copy_data
needs: []
only:
- schedules
- $COPY_DB # this is set in the pipeline menu on gitlab
script:
- ...
timeout: 3h
答案 0 :(得分:1)
copy_database:on-schedule:
stage: copy_data
needs: []
rules:
- if: $CI_PIPELINE_SOURCE == "schedule" || $COPY_DB
when: always
script:
...
答案 1 :(得分:1)
我终于找到了问题所在!问题是 gitlab 说的是 Successfully scheduled a pipeline to run. Go to the Pipelines page for details.
而实际上存在错误。
为了调试它,我使用了 here 描述的技巧,即运行手动管道并设置 CI_PIPELINE_SOURCE = "schedule"
。以这种方式运行管道返回了错误消息,我能够解决这个问题。
如果您想知道错误是什么,这里有更多详细信息。
我有两个管道可选地在主分支上运行:
prepare_release:
stage: prepare_release
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manual
script:
- ...
create_release:
image: registry.gitlab.com/gitlab-org/release-cli:latest
stage: release
needs:
- job: prepare_release
artifacts: true
rules:
// HERE THERE SHOULD BE A RULE TO PREVENT THIS FROM RUNNING ON SCHEDULE
// - if: $CI_PIPELINE_SOURCE == "schedule"
// when: never
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- ...
第二个管道没有
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
因此尝试按计划运行。但是,由于它需要前一个并且未创建,因此会出错。 我的错误是假设“需求”会考虑来自父作业的这个规则。
答案 2 :(得分:0)
这是因为它受到保护,而不是只是因为它受到保护。 create pipelines on a protected branch 的能力取决于用户合并或推送到该分支的能力。计划管道在计划所有者 (initially, the user who created it).
您要么需要让您的用户在 master 上获得合并/推送访问权限,要么让另一个拥有该权限的用户拥有计划的所有权。