Jenkinsfile:前一阶段(仍在运行)的卷曲日志

时间:2018-09-08 21:15:10

标签: jenkins jenkins-pipeline

我正在从链接的自由式作业迁移到管道中,以使管道包含在Jenkinsfile中。

我当前的管道将并行执行2个作业,一个将创建到数据库的隧道(具有随机生成的端口),下一个作业需要获取此端口号,因此我正在执行curl命令并读取控制台create-db-tunnel作业并存储端口号。 create-db-tunnel需要保持运行,因为后续作业正在连接到数据库并正在进行数据库转储。这是我在第二项作业上运行的curl命令,它从已建立的DB隧道返回随机生成的端口号:

Port=$(curl -u ${USERNAME}:${TOKEN} http://myjenkinsurl.com/job/create-db-tunnel/lastBuild/consoleText | grep Port | grep -Eo '[0-9]{3,5}')

我想知道在Jenkinsfile中是否可以使用类似的东西?我目前有两个并行触发的作业,但是由于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 :(得分:0)

实际上,我找到了解决我的问题的方法-这是我必须运行的非常类似的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
                        """
                    }
                }
            }
        }
    }
}