GitLab CI: пропустите задание, если изменились только определенные файлы

# #gitlab-ci #gitlab-pipelines

#gitlab-ci #gitlab-конвейеры

Вопрос:

Мне нужно пропустить задание GitLab CI в моем конвейере, если единственная часть изменений commit/merge request связана с *.md, eslintrc.json or jsconfig.json файлами.

Примеры:

  • Если эти файлы изменились, но другие, такие как *.js, тоже изменились: задание должно выполняться.
  • Если эти файлы вообще не изменены, но другие файлы *.js изменились: задание должно быть выполнено.
  • Если README.md и eslintrc.json изменились, и больше ничего не изменилось: задание не должно выполняться.

Я пытался сделать это, но до сих пор не нашел except:changes ничего rules:when:never полезного. Как я могу это сделать?

Ответ №1:

Если я правильно вас except:changes понял, в вашем файле CI должно быть соглашение.

Взгляните на этот пример. Задание выполняется в любом состоянии в случае, если *.md, eslintrc.json и jsconfig.json изменились. В этом случае трубопровод не будет работать. Проверьте этап «Кроме изменений» в приведенном ниже примере.

С другой стороны, вы можете настроить запуск конвейера на случай, если какие-либо файлы js изменились. Проверьте этап * только-изменения* в приведенном ниже примере.

 stages:  - except-changes  - only-changes  ignore-file-changes:  stage: except-changes  script:  - echo "Skip running the pipeline if *.md, eslintrc.json and jsconfig.json has any kind of change."  except:   changes:  - "**/*.md"  - eslintrc.json  - jsconfig.json  - README.md   pass-the-pipeline:  stage: only-changes  script:  - echo "Run only *.js and Dockerfile files has any kind of change."  only:  changes:  - Dockerfile  - "**/*.js"   

Комментарии:

1. В вашем примере, если README.md изменено, и файл *.js также изменился, задание не будет выполняться. из-за пункта «кроме». Я спрашиваю, как я мог бы заставить его работать, если это так.

2. Я просто думаю об этом, и на самом деле мне приходит в голову, что в случае, если мы просто запустим конвейер с файлами *.js, проблема будет решена. README.md файл и файл *.js меняются, конвейер запускается. Если какие-либо другие файлы, кроме файлов, которые мы установили в конвейере, были изменены, конвейер не будет запущен.

3. *файл.js-это просто пример. Задание должно выполняться для всех остальных файлов в репозитории, за исключением тех 3, о которых я упомянул. И их сотни, поэтому я не могу перечислить их все. Отсюда и мой вопрос.