Jenkinsfile: скручивать логи с предыдущего (все еще работающего) этапа - PullRequest
0 голосов
/ 09 сентября 2018

Я нахожусь в процессе перехода с рабочих мест вольным стилем, прикованных к конвейеру, чтобы получить конвейер в 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
                        """
                    }
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 09 сентября 2018

На самом деле, я нашел решение своего вопроса - мне пришлось выполнить очень похожую команду curl, и теперь я получаю нужный номер порта, который мне нужен. Вот jenkinsfile, если кому-то интересно:

pipeline {
    agent any
    environment {
    APTIBLE_LOGIN = credentials('aptible')
    JENKINS_TOKEN = credentials('jenkins')
    }
    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 20
                          Port=\$(curl -u $JENKINS_TOKEN_USR:$JENKINS_TOKEN_PSW http://myjenkinsurl.com/job/schema-archive-jenkinsfile/lastBuild/consoleText | grep Port | grep -Eo '[0-9]{3,5}')
                          echo "Port=\$Port" > port.txt
                        """
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...