Я пытаюсь использовать файл Jenkins для всех наших сборок в Jenkins, и у меня возникла следующая проблема. У нас в основном есть 3 вида сборок:
- сборка по запросу - он будет объединен с мастером после проверки кода, и если сборка работает
- сборка по запросу вручную - сборка, которая выполняет те же действия, что и выше, но может быть запущена пользователем вручную (например, в случае нестабильного теста)
- начальный конвейер непрерывной доставки - он создаст код, развернет его в хранилище, установит артефакты из хранилища на целевом сервере и запустит там приложение
Как я должен содержать все вышеперечисленные сборки в один Jenkinsfile. Прямо сейчас единственная идея, которую я имею, состоит в том, чтобы создать гиганта, если он проверит, какая это ветвь и сделает шаги.
Итак, у меня есть два вопроса:
1. Это подходящий способ сделать это в Jenkinsfile?
- Как получить имя выполняемой в данный момент ветки в виде многоотраслевого задания?
Для справки, вот мой текущий Jenkinsfile
:
def servers = ['server1', 'server2']
def version = "1.0.0-${env.BUILD_ID}"
stage 'Build, UT, IT'
node {
checkout scm
env.PATH = "${tool 'Maven'}/bin:${env.PATH}"
withEnv(["PATH+MAVEN=${tool 'Maven'}/bin"]) {
sh "mvn -e org.codehaus.mojo:versions-maven-plugin:2.1:set -DnewVersion=$version -DgenerateBackupPoms=false"
sh 'mvn -e clean deploy'
sh 'mvn -e scm:tag'
}
}
def nodes = [:]
for (int i = 0; i < servers.size(); i++) {
def server = servers.get(i)
nodes["$server"] = {
stage "Deploy to INT ($server)"
node {
sshagent(['SOME-ID']) {
sh """
ssh ${server}.example.com <<END
hostname
/apps/stop.sh
yum -y update-to my-app.noarch
/apps/start.sh
END""".stripIndent()
}
}
}
}
parallel nodes
РЕДАКТИРОВАТЬ: удален вопрос, основанный на мнении