Gitlab CI - 运行 管道仅在由 CRON 触发时
Gitlab CI - Run pipeline ONLY when triggered by CRON
你好,我是 gitlab 的新手,到目前为止,我已经成功完成了所有工作(跑步者、管道等...)
但我现在想设置自动测试每天只构建一次,由 CRON 触发,但不会由 git 存储库上的每次推送触发。
我正在使用没有新 SCHEDULE 功能的 8.14.2 gitlab
所以我用了这个 gitlab.ci.yml:
stages:
- test
test-karma:
stage: test
image: node:8.9.4
before_script:
- apt-get update
- apt-get --yes install npm
- apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
- npm install @angular/cli@1.4.5
- npm install
environment: dev
script:
- ./node_modules/.bin/ng test --single-run=true --watch=false
only:
- triggers
except:
- pushes
但是尽管有 only / except 部分,作业还是被触发了:
() 对于每个 git 推送(我不想要)
() 通过我想要的 CRON
所以我找到了另一种方法
1- 在 gitlab
上将变量 SHOULD_EXECUTE 设置为 false
2- 通过 if 语句
保护每个脚本行
3- 使用以下 CRON:
00 4 * * * curl -X POST -F token=MY_TOKEN -F ref=master -F "variables[SOULD_EXECUTE]=true" http://MY_GITLAB_URL/api/v3/projects/30/trigger/builds
4- 并将 gitlab.ci.yml 更改为
stages:
- test
test-karma:
stage: test
image: node:8.9.4
before_script:
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get update;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get --yes install npm ;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then npm install @angular/cli@1.4.5;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then npm install; else echo "TEST JOB SKIPPED";fi
- echo 'SOULD_EXECUTE => ' + ${SOULD_EXECUTE}
environment: dev
script:
- if [ ${SOULD_EXECUTE} == "true" ]; then ./node_modules/.bin/ng test --single-run=true --watch=false;fi
only:
- triggers
太丑了...有人可以帮我设置一下吗?非常感谢。
问候。
我在不知道如何或为什么的情况下解决了我的问题。我不得不将 repo 移动到 gitlab 中的另一个组。现在它运行完美,唯一的 : 触发器(除了 : pushes 之外)使我能够 NOT 运行 每次推送的管道,我可以 运行 通过 CRON post 调用。
下面的代码在不使用 except
的情况下也可以使用
only:
- schedules
你好,我是 gitlab 的新手,到目前为止,我已经成功完成了所有工作(跑步者、管道等...)
但我现在想设置自动测试每天只构建一次,由 CRON 触发,但不会由 git 存储库上的每次推送触发。
我正在使用没有新 SCHEDULE 功能的 8.14.2 gitlab
所以我用了这个 gitlab.ci.yml:
stages:
- test
test-karma:
stage: test
image: node:8.9.4
before_script:
- apt-get update
- apt-get --yes install npm
- apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
- npm install @angular/cli@1.4.5
- npm install
environment: dev
script:
- ./node_modules/.bin/ng test --single-run=true --watch=false
only:
- triggers
except:
- pushes
但是尽管有 only / except 部分,作业还是被触发了:
() 对于每个 git 推送(我不想要)
() 通过我想要的 CRON
所以我找到了另一种方法
1- 在 gitlab
上将变量 SHOULD_EXECUTE 设置为 false
2- 通过 if 语句
保护每个脚本行
3- 使用以下 CRON:
00 4 * * * curl -X POST -F token=MY_TOKEN -F ref=master -F "variables[SOULD_EXECUTE]=true" http://MY_GITLAB_URL/api/v3/projects/30/trigger/builds
4- 并将 gitlab.ci.yml 更改为
stages:
- test
test-karma:
stage: test
image: node:8.9.4
before_script:
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get update;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get --yes install npm ;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6
ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then npm install @angular/cli@1.4.5;fi
- if [ ${SOULD_EXECUTE} == "true" ]; then npm install; else echo "TEST JOB SKIPPED";fi
- echo 'SOULD_EXECUTE => ' + ${SOULD_EXECUTE}
environment: dev
script:
- if [ ${SOULD_EXECUTE} == "true" ]; then ./node_modules/.bin/ng test --single-run=true --watch=false;fi
only:
- triggers
太丑了...有人可以帮我设置一下吗?非常感谢。
问候。
我在不知道如何或为什么的情况下解决了我的问题。我不得不将 repo 移动到 gitlab 中的另一个组。现在它运行完美,唯一的 : 触发器(除了 : pushes 之外)使我能够 NOT 运行 每次推送的管道,我可以 运行 通过 CRON post 调用。
下面的代码在不使用 except
only:
- schedules