标签: jenkins-declarative-pipeline

如何在从站上执行的管道阶段中获取 Jenkins 主 IP/主机名?

我有一个 Jenkins 声明式管道,我在一个阶段构建并在另一个阶段在不同的机器上进行测试。我还有一个 Selenium 集线器,它与 Jenkins 主机在同一台机器上运行。

pipeline {
  agent none
  stages {
    stage('Build') {
      agent { node { label 'builder' } }
      steps {
        sh 'build-the-app'
        stash(name: 'app', includes: 'outputs')
      }
    }
    stage('Test’) {
      agent { node { label 'tester' } }
      steps {
        unstash 'app'
        sh 'test-the-app'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望在测试阶段运行的 Selenium 测试连接回 Jenkins 主机上的 Selenium 集线器,这意味着我需要从从机获取 Jenkins 主机的 IP 地址或主机名。

有没有办法做到这一点?Jenkins 主 URL / 主机名不在环境变量中,我不确定如何获取 Jenkins 主的 IP 地址。

jenkins jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
3万
查看次数

如何使用 jenkins 声明式管道新语法测试 sh 脚本返回状态

使用新的 jenkins 声明性管道语法,我想测试 sh 脚本执行的返回状态。是否可以不使用脚本步骤?

脚本管道(工作):

...
stage ('Check url') {
   node {
    timeout(15) {
      waitUntil {
        sleep 20
        def r = sh script: "wget -q ${CHECK_URL} -O /dev/null", returnStatus: true
        return (r == 0);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

声明式管道(尝试):

...
      stage('Check url'){
        steps {
            timeout(15) {
                waitUntil {
                    sleep 20
                    sh script: "wget -q ${CHECK_URL} -O /dev/null", returnStatus: true == 0
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

日志:java.lang.ClassCastException:主体返回值 null 不是布尔值

jenkins jenkins-declarative-pipeline

5
推荐指数
1
解决办法
1万
查看次数

如何在jenkinsfile中硬链接文件

我的总体目标是,从S3同步文件,然后硬链接以避免"多个副本"并在构建docker容器时节省空间.这是我到目前为止所拥有的

withAWS(region: 'us-east-1') {
    s3Download(
        bucket: 'artifacts.mydomain.tld',
        file: "${env.ORACLE_RPM}",
        path: "${env.HOME}/${env.ORACLE_RPM}",
    )
    script {
        linkBlocking("etc/docker/${env.PROJECT}/${env.ORACLE_RPM}", "${env.HOME}/${env.ORACLE_RPM}")
    }
}
Run Code Online (Sandbox Code Playgroud)

这些s3Download作品虽然我不确定如果有更新的版本可以更新文件.

但是,当我尝试使用FileSystem该类时,我实际上无法找出正确的调用约定,构造函数至少似乎未被记录.

groovy jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
0
解决办法
320
查看次数

声明性管道-使用when条件,如何做嵌套条件anyOf / allOf / not

我被困在如何正确使用Jenkins语法中提出的嵌套条件。

https://jenkins.io/doc/book/pipeline/syntax/#when

这是我目前的阶段:

stage('Build'){
when{
    anyOf{
        allOf{
            expression{env.BRANCH_NAME != 'master'}
            expression{env.AUTO_BUILD == true && env.BUILD_OPT == snapshot && env.BRANCH_NAME !=~ /feature.+/} 
        }
        expression{env.AUTO_BUILD == false}
    }
}
steps{
    echo env.AUTO_BUILD
    echo env.BUILD_OPT
    echo env.BRANCH_NAME
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果我设置env.AUTO_BUILD = false,那么应该执行此阶段,因为它包含在anyOfOR中,如果我的分支是eg develop和,它将执行AUTO_BUILD = true, BUILD_OPT = snapshot
但是,当我设置时情况并非如此AUTO_BUILD = false。该阶段未执行。我想念什么吗?

jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
4155
查看次数

Jenkins声明式管道:如何重命名“声明式:发布操作”步骤?

我有一个声明性管道,如下所示:

pipeline {
    stages {...}
    post {
        success {...}
        failure {...}
    }
}
Run Code Online (Sandbox Code Playgroud)

它导致创建称为“声明性:发布操作”的最后一步。

问:如何重命名“声明式:发布操作”步骤?

我想要一个有意义的名称,例如“发送电子邮件通知”。

管道

更新:

名称在此类中进行了硬编码。使用当前版本的API(3.44),无法重命名它们。

jenkins jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
151
查看次数

Jenkins 管道中触发器指令的条件

Jenkins 有一个很好的相对全面的关于 Jenkinsfile 语法的文档。但是我仍然没有找到答案是否可以在管道的顶层进行流量控制?从字面上看,if仅在pipeline {}部分(声明性)中包含一些内容,例如:

pipeline {
    if (bla == foo) {
        triggers {
            ...configuration
        }
} 
Run Code Online (Sandbox Code Playgroud)

或者

pipeline {
    triggers {
        if (bla == foo) {
            something...
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

triggerssection 是一个只能包含一次并且只能包含在该pipeline部分中的部分。但是if语句似乎只适用于阶段级别。

有谁知道如何triggers有条件地包含指令中的某些内容,例如, 或有条件地包含指令本身?

jenkins jenkins-groovy jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
1482
查看次数

Jenkins 声明式管道记录一条在 Blue Ocean 中可见的警告消息

是否可以像unstable(MESSAGE)警告消息一样在 Jenkins Blue Ocean 视图中创建警告日志消息,但不将孔构建状态设置为不稳定?

我的意思是此视图中的黄色/橙色日志消息“无法加载依赖项!”: 不稳定()的例子

catchError(message: 'MESSAGE', buildResult: 'SUCCESS', stageResult: 'UNSTABLE') 也无济于事,因为该消息在 Blue Ocean 视图中不可见。

jenkins jenkins-pipeline jenkins-blueocean jenkins-declarative-pipeline

5
推荐指数
0
解决办法
474
查看次数

从 Jenkins 声明性管道运行 curl 命令

我正在尝试从 Jenkins 声明式管道执行curl post 命令,但是,它抛出语法错误 - Expecting '}' find ':'

管道脚本如下:

pipeline {

   agent { label ' Linux01'}

   stages {

      stage('Hello') {

         steps {

            sh 'curl -u username:password -X POST -d '{"body":"Jenkinspipleinecomment"}' -H "Content-Type:application/json" http://localhost:8080/rest/api/2/issue/someissue/comment'
    
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

请帮忙。

curl jira jenkins jenkins-declarative-pipeline

5
推荐指数
1
解决办法
2万
查看次数

Jenkinsfile:如何捕获 docker.Image.run() 的标准输出?

我想使用 Jenkinsdocker.Image.run()来运行GitVersion

bashshell 中,如果我运行

docker run --rm -v "$(pwd):/repo" gittools/gitversion:5.6.6 /repo
Run Code Online (Sandbox Code Playgroud)

...JSON 格式的字符串被发送到 stdout。

我希望我的 Jenkinsfile 能够使用这个标准输出。
我知道我可以从 Jenkinsfile 运行这个 docker 容器,如下所示:

pipeline {
  agent any
  stages {
    stage("1") {
      steps {
        script {
          def img = docker.image("gittools/gitversion:5.6.6")
          img.run('-v "$(pwd):/repo"', '/repo')
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何使用捕获运行容器的标准输出docker.Image.run()

我知道我可以通过调用捕获容器的标准输出sh,例如

def my_stdout = sh(script: 'docker run --rm -v "$(pwd):/repo" gittools/gitversion:5.6.6 /repo`,
                   returnStdout:true)
Run Code Online (Sandbox Code Playgroud)

...但是我想具体学习一下,如果可能的话/如何从 Jenkins' 捕获标准输出docker.Image.run(),如所述${JENKINS_URL}/job/${job}/pipeline-syntax/globals#docker

stdout jenkins docker gitversion jenkins-declarative-pipeline

5
推荐指数
0
解决办法
859
查看次数

如何在 Jenkins 声明式管道中实现嵌套并行?

我有如下声明式管道,它并行运行 2* 和 3* 阶段,粘贴下面的蓝海图。

pipeline {
    agent { label 'my_node' }
    options {
        timestamps()
        parallelsAlwaysFailFast()
    }
    stages {
        stage('1') {
            steps {
                script {
                    step([$class: 'WsCleanup'])
                }
            }
        }
        stage('2') {
            parallel {
                stage("2.1") {
                    steps {
                        script {
                            sh 'echo hi 2.1'
                        }
                    }
                }
                stage("2p") {
                    steps {
                        script {
                            sh 'echo hi 2p'
                        }
                    }
                }
            }
        }
        stage('3') {
            parallel {
                stage('3.1') {
                    steps {
                        script {
                            sh """
                               echo hi 3.1
                            """
                        }
                    } …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline jenkins-declarative-pipeline

5
推荐指数
1
解决办法
4392
查看次数