Перейти к содержимому

Фотография

Jenkins pipeline запускается циклично, не дожидаясь прохождения сборки

jenkins pipeline ci autotests

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 Poet_Peselnik

Poet_Peselnik

    Новый участник

  • Members
  • Pip
  • 28 сообщений

Отправлено 07 августа 2018 - 05:59

Всем привет. 

Есть два репозитория в gitlab один с основным проектом, второй репозиторий с автотестами.

Создан Jenkins pipeline, со следующими конфигурациями:

Build triggers:

    Poll SCM Schedule: * * * * * (то есть проверять изменения каждую минуту).

В разделе Pipeline указан репозиторий основного проекта: 

Definition: Pipeline script from SCM

SCM: Git

Repositories:

   Repository URL: https://gitlab.com/App/Application.git

   Credentials: Creds/******

Branches to build:

   Branch Specifier (blank for 'any'): */master

Repository browser: Auto

Script Path: pipelines/Jenkinsfile

 

Содержимое Jenkinsfile примерно следующее:

try {
    node('Slave') {
        stage('Build') {
            dir('Backend') {
                git url: "https://$gitRepo", branch: 'master', credentialsId: gitlabCredentialsId

                def commitHash = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
                version = "${getDateTime()}-$commitHash"

                sh 'chmod +x gradlew && ./gradlew clean build --no-daemon'


                withCredentials([usernamePassword(credentialsId: gitlabCredentialsId,
                        passwordVariable: 'GITLAB_PASSWORD', usernameVariable: 'GITLAB_USERNAME')]) {
                    sh("docker login $registryName -u $GITLAB_USERNAME -p $GITLAB_PASSWORD")
                }

                docker.withRegistry("https://$registryName") {
                    def image = docker.build(imageName)
                    image.push(version)
                    image.push('latest')
                }
                sh 'docker system prune -af || true'
            }
        }

        stage('Integration tests') {
            dir('Autotests') {
                try {
                    url: "https://$autotestsGitRepo", branch: 'master', credentialsId: gitlabCredentialsId

                    withCredentials([usernamePassword(credentialsId: gitlabCredentialsId,
                            passwordVariable: 'GITLAB_PASSWORD', usernameVariable: 'GITLAB_USERNAME')]) {
                        sh("docker login $registryName -u $GITLAB_USERNAME -p $GITLAB_PASSWORD; docker-compose pull backend; docker-compose up -d")
                        waitUntilAppIsUp(localhost)
                        sh('./gradlew clean test')
                    }

                } finally {
                    sh("docker-compose down")
                    step([$class: 'JUnitResultArchiver', keepLongStdio: true, testResults: 'build/test-results/test/*.xml'])
                }
            }
        }

        stage('Staging deployment') {
            withCredentials([usernamePassword(credentialsId: gitlabCredentialsId,
                    passwordVariable: 'GITLAB_PASSWORD', usernameVariable: 'GITLAB_USERNAME')]) {
                sshagent(credentials: [sshInstanceCredentialsId]) {
                    dir('Backend') {
                        sh "scp -o StrictHostKeyChecking=no docker-compose.yml $instanceHost:"
                        sh "ssh -o StrictHostKeyChecking=no $instanceHost 'docker login $registryName -u $GITLAB_USERNAME -p $GITLAB_PASSWORD; docker-compose pull backend; docker-compose up -d'"
                        waitUntilAppIsUp(stagingHost)
                    }
                }
            }
        }
    }
} catch (e) {
    throw e
}

Вкратце - сначала приложение клонируется из репозитория основного проекта на jenkins слэйве,  билдится, собирается в докер образ и пушится в докер регистри.

Второй этап это клонирование репозитория с автотестами тоже на jenkins слэйв, далее из докер регистри пулится образ с приложением и разворачивается с помощью docker-compose. После чего запускаются автотесты с помощью команды ./gradlew clean test.

Третий этап заходим по ssh на стэйджинг и разворачиваем там приложение.

 

Суть вопроса:

Когда делаю мерж в мастер в основном проекте Application, через минуту проверяется, что есть изменения и сборка запускается, как и должно быть и проходит или падает один раз.

Но если я делаю мерж в мастер в другом репозитории - в проекте автотестов Autotests, то сборка запускается как и должна через 1 минуту, далее не дожидается пока пройдёт сборка запускается через минуту ещё одна(та же самая), потому через минуту ещё одна(та же самая) и так до бесконечности, пока хотя бы одна сборка не пройдёт или не упадёт. Кто нибудь с этим сталкивался? Как это исправить. Не совсем понимаю почему отслеживается автотестовый репозиторий на изменения, если в Repository URL указан репозиторий основного проекта https://gitlab.com/App/Application.git.


  • 0



Темы с аналогичным тегами jenkins, pipeline, ci, autotests

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных