Jenkins: запускать миграцию только после изменения папки миграции - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть конвейерный скрипт, и я хотел бы выполнять различные действия в зависимости от изменений в папке миграций.

По сути, это будет рабочий процесс, подобный этому

  1. Извлечение изменений в хранилище
  2. Проверьте, есть ли в папке migrations/ новые миграции или изменения
  3. Если есть изменения, запустите миграцию, если нет, продолжайте

Я не уверен, как мне этого добиться, я использую версию 2.1 и плагин git.Этот репозиторий находится на частном сервере

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вероятно, есть способ сделать это напрямую с плагином, но я получаю опцию для включенных регионов только в том случае, если добавляю другой источник ветвления как «Единый репозиторий и ветвь», поэтому на данный момент я реализовал это решение:

Я добавил это в свой Jenkinsfile, чтобы проверить изменения в папке migrations/

script {
    env.CONTAINS_MIGRATIONS = sh (
        script: 'git diff --name-only --diff-filter=AMDR --cached HEAD^',
        returnStdout: true
    ).trim()

    if (env.CONTAINS_MIGRATIONS.contains('migrations')) {
        // Do migrations related stuff
    }
}

Я делаю это, учитывая, что вряд ли возникнут конфликты имен файлов, и если они произойдут, это не слишкомдело

0 голосов
/ 27 декабря 2018

В вашем случае должна помочь функция «включенный регион» из плагина Git.См. этот ответ для подробностей.

Таким образом, для конвейера вы можете сгенерировать правильный синтаксис, используя генератор синтаксиса конвейера (под http://<JENKINS_IP>:<JENKINS_PORT>/job/<PATH_TO_PIPELINE_JOB>/pipeline-syntax/ заданием в Пример шага: оформить заказ -> SCM: Git -> Дополнительные действия -> Опрос игнорирует коммитыв определенных направлениях ).Это будет что-то вроде этого:

checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'PathRestriction', excludedRegions: '', includedRegions: 'migrations/.*']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'test', url: 'http://test.com/test.git']]])

Проверьте эту документацию для деталей (extensions -> includedRegions).

Для синтаксиса задания dsl это будет похоже на this :

scm {
    git {
        remote {
            ...
        }
        extensions {
            cleanBeforeCheckout()
            disableRemotePoll() // this is important for path restrictions to work
            configure { git ->
                git / 'extensions' / 'hudson.plugins.git.extensions.impl.PathRestriction' {
                    includedRegions "somepath/.*"
                    excludedRegions "README.md\n\\.gitignore\npom.xml"
                }
            }
        }
    }
}

Кроме того, вы можете использовать веб-зацепки GitHub / GitLab / BitBucket для создания проекта, когда изменение помещается в репозиторий.См. этот пример для конфигурации Github и BitBucket и этот пример для конфигурации GitLab.

Если вы хотите построить проект только для изменений в папке migrations, а недля любых изменений в репозитории вы можете настроить регулярное выражение комментария для запуска сборки и добавлять этот конкретный комментарий (например, «[изменения в папке миграции]») в коммит каждый раз, когда вы хотите запустить сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...