Как использовать правило в gitlab-ci - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь создать задание, которое может быть условно выполнено, зависит от того, были ли изменены файлы или подкаталоги в WebClient в ветви develop с использованием rules. Если будут обнаружены изменения только в ветви разработки, будет построен конвейер.

В настоящее время в моем .gitlab-ci.yml получено

deploy_dev_client:
  stage: client
  tags:
    - my tags
  script:
    - '& cd WebClient'
    - 'npm rebuild node-sass'
    - 'npm install @angular/cli@7.0.3'
    - '& npm run build-release --max_old_space_size=$NODE_MEMORY_SIZE'

  rules:
    - changes:
      - WebClient/**/*
      when: always
    - when: never

Однако после тестирования я понял, что конвейер выполняется всякий раз, когда я пу sh что-то из моего локального репо в gitlab, даже на другой стороне ветви.

Я пытался использовать only:-develop', однако это приводит к ошибке yaml invalid, может быть из-за невозможности использовать only, если rules уже был использован. Могу ли я в любом случае использовать rules для таргетинга только на develop ветку?

1 Ответ

0 голосов
/ 15 января 2020

В этой ссылке:

https://docs.gitlab.com/ee/ci/yaml/#ruleschanges

Они пишут, что rules: changes должно работать точно так же, как only/except. Если вы читаете о only/except, с ним есть несколько странных вещей:

https://docs.gitlab.com/ee/ci/yaml/#using -onlychanges-без-конвейеров-для-слияния-запросов

При отправке новой ветви или нового тега в GitLab политика всегда оценивается как true.

Чтобы обойти это и выполнить свою работу только в ветви разработки, вы должны иметь возможность объедините if с changes:

deploy_dev_client:
  stage: client
  tags:
    - my tags
  script:
    - '& cd WebClient'
    - 'npm rebuild node-sass'
    - 'npm install @angular/cli@7.0.3'
    - '& npm run build-release --max_old_space_size=$NODE_MEMORY_SIZE'

  rules:
    - if: '$CI_COMMIT_REF_NAME== "development"'
      changes:
      - WebClient/**/*
      when: always

(я не проверял этот код, поэтому дайте мне знать, если он все не так!)

...