Я нахожусь в процессе перехода с рабочих мест вольным стилем, прикованных к конвейеру, чтобы получить конвейер в Jenkinsfile.
Мой текущий конвейер будет выполнять 2 задания параллельно, одно создаст туннель к базе данных (со случайно сгенерированным портом), а следующее задание должно получить этот номер порта, поэтому я выполняю команду curl и читаю консоль задания create-db-tunnel
и сохранение номера порта. create-db-tunnel
должен продолжаться, поскольку последующее задание подключается к базе данных и выполняет дамп базы данных. Это команда curl, которую я запускаю на втором задании и которая возвращает случайно сгенерированный номер порта из установленного туннеля БД:
Port=$(curl -u ${USERNAME}:${TOKEN} http://myjenkinsurl.com/job/create-db-tunnel/lastBuild/consoleText | grep Port | grep -Eo '[0-9]{3,5}')
Интересно, есть ли что-нибудь подобное, что я могу использовать в Jenkinsfile? В настоящее время у меня есть 2 задания, запускаемые параллельно, но, поскольку create-db-tunnel
больше не является вольным стилем, я не уверен, смогу ли я все еще получить номер порта? Я могу подтвердить, что в журналах консоли для этапа db_tunnel
указан номер порта, но я не уверен, как можно запросить эту консоль. Вот мой файл jenkinsfile:
pipeline {
agent any
environment {
APTIBLE_LOGIN = credentials('aptible')
}
stages {
stage('Setup') {
parallel {
// run db_tunnel and get_port in parralel
stage ('db_tunnel') {
steps {
sh """
export PATH=$PATH:/usr/local/bin
aptible login --email=$APTIBLE_LOGIN_USR --password=$APTIBLE_LOGIN_PSW
aptible db:tunnel postgres-prod & sleep 30s
"""
}
}
stage('get_port') {
steps {
sh """
sleep 15s
//this will not work
Port=$(curl -u ${USERNAME}:${TOKEN} http://myjenkinsurl.com/job/db_tunnel/lastBuild/consoleText | grep Port | grep -Eo '[0-9]{3,5}')
echo "Port=$Port" > port.txt
"""
}
}
}
}
}
}