Jenkins PollScm для конкретного хранилища - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу построить проект с использованием двух репозиториев Git.Один из них содержит исходный код, а другой - сценарии сборки и развертывания.

Я использую конвейер Jenkins для построения моего проекта.Конвейерные сценарии находятся в репозитории Jenkins-pipeline , а Исходный код - в репозитории middleware .Поскольку мои конвейерные сценарии находятся в репозитории Jenkins-конвейера, я настраиваю свой конвейер с помощью Jenkinsfile из репозитория Jenkins-конвейера.

Вот файл Jenkins, который я использую:

pipeline {
agent any
parameters {
    string(name: 'repo_branch', defaultValue: 'development', description: 'The branch to be checked out')
    string(name: 'git_repo',  defaultValue: 'ssh://git@my-server.com/middleware.git' description: 'Git repository from where we are going to checkout the code')

}
options {

    buildDiscarder(logRotator(numToKeepStr: '5'))
    disableConcurrentBuilds()
    timeout(time: 10, unit: 'MINUTES')
}
triggers {
    pollSCM('* * * * *')
}
stages {
    stage('Checkout git repo') {
        steps {
            git branch: "${params.repo_branch}", url: "${params.git_repo}", credentialsId: 'git-credentials'
        }
    }
    stage('Build binary') {
        steps {
            sh "./gradlew clean build -x test"
        }
    }
}
}

Сейчас,как мы можем видеть, хранилище, которое я клонирую в Jenkinsfile, отличается, а хранилище, в котором я храню свой jenkinsfile, отличается.

Теперь проблема заключается в следующем:
В Jenkinsфайл, я использую pollScm для запуска моего задания Jenkins всякий раз, когда в репозитории появляется новый коммит, но у меня есть два репозитория, которые я настроил для задания, поэтому

  1. Исходный кодРепозиторий (middleware.git)
  2. Репозиторий конвейерных сценариев (Jenkins-pipeline.git)

Поэтому, когда в любом из этих репозиториев происходит коммит, моя работа Jenkins запускается, чтоЯ не хочу Я хочу запускать сборку My Jenkins, только когда в моем репозитории исходного кода есть новая фиксация, и НЕ следует запускать сборку, когда в репозиториях Jenkins-конвейера есть фиксация. Как мне это сделать?

Обновление

Я использую общие библиотеки в Jenkinsfile, и эти библиотеки также находятся в другом хранилище.Когда я фиксирую что-то в репозитории совместно используемой библиотеки, то также запускаются задания Jenkins, и я использую совместно используемую библиотеку в нескольких заданиях, поэтому из-за этого запускаются все задания, которые я не хочу.

PSЯ не могу использовать веб-крючки для запуска моей сборки Jenkins, потому что мои Jenkins находятся в частной сети!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Чтобы библиотека не была включена в проверку изменений, снимите флажок «Включить изменения @Library в недавние изменения задания» на странице «Конфигурация системы» для соответствующей библиотеки или установите новый возможный аргумент «changelog =false 'в директиве @Library' конвейера.

Если сам конвейер не включен в команду 'pull scm', это немного сложнее.Одним из вариантов является включение Jenkinsfile в репозиторий кода, но если сам Jenkinsfile будет изменен, сборка также будет запущена, и она на самом деле не нужна.

Другой вариант - включить вначало конвейера - проверка, находится ли изменение, инициирующее задание, в репозитории-источнике или в репозитории-конвейере, и если его нет в репозитории-источнике, остановите сборку.

0 голосов
/ 22 ноября 2018

Ответ довольно прост.A Jenkinsfile всегда принадлежит корневому каталогу хранилища исходного кода.Вы должны зарегистрировать свой Jenkinsfile в хранилище промежуточного программного обеспечения.

Pipeline поддерживает два синтаксиса: декларативный (представлен в Pipeline 2.5) и Scripted Pipeline.Оба из которых поддерживают строительство непрерывных трубопроводов доставки.Оба могут быть использованы для определения конвейера в веб-интерфейсе пользователя или в Jenkinsfile, хотя обычно рекомендуется создавать Jenkinsfile и проверять файл в репозитории исходного кода

Обновление - Пропустить триггер shared-lib

Такая опция для отключения журнала изменений существует, начиная с версии 2.9 модуля Pipeline Shared Groovy Libraries:

@Library(value="mylib", changelog=false) 
...