Gitlab CI - 仅在CRON触发时运行管道

时间:2018-01-30 10:46:19

标签: gitlab gitlab-ci gitlab-ci-runner

您好我是gitlab的新手,到目前为止我成功完成了所有事情(跑步者,管道等......)

但是我现在想要每天只设置一次自动测试,由CRON触发,但是在git repo上进行的每次推送都没有触发。

我使用的是8.14.2 gitlab而没有新的SCHEDULE功能

所以我使用了这个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

但是,尽管只有/除了部分,工作被触发:

()对于每个git push(我不想要)
()我想要的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
这是丑陋的......有人可以帮助我解决这个问题吗?非常感谢你。

问候。

2 个答案:

答案 0 :(得分:0)

我修正了我的问题而不知道如何或为什么。我不得不将repo移动到gitlab中的另一个组。现在它完美地工作,唯一的:触发器(没有除了:推动)使我不能为每次推送运行管道,我可以通过CRON后调用来运行它。

答案 1 :(得分:0)

以下也可以在不使用except

的情况下工作
   only:
     - schedules