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

Selenium IDE 3: стартовый уровень
онлайн, начало 19 апреля
Школа для начинающих тестировщиков
онлайн, начало 22 апреля
Тестирование REST API
онлайн, начало 22 апреля
Тестирование юзабилити (usability)
онлайн, начало 24 апреля
Фотография

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

jenkins pipeline ci autotests

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

#1 Poet_Peselnik

Poet_Peselnik

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

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

Отправлено 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


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн




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

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

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

Яндекс.Метрика
Реклама на портале