我正在从链接的自由式作业迁移到管道中,以使管道包含在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
"""
}
}
}
}
}
}
答案 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
"""
}
}
}
}
}
}