我有一个 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 声明性管道语法,我想测试 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 不是布尔值
我的总体目标是,从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该类时,我实际上无法找出正确的调用约定,构造函数至少似乎未被记录.
我被困在如何正确使用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。该阶段未执行。我想念什么吗?
我有一个声明性管道,如下所示:
pipeline {
stages {...}
post {
success {...}
failure {...}
}
}
Run Code Online (Sandbox Code Playgroud)
它导致创建称为“声明性:发布操作”的最后一步。
问:如何重命名“声明式:发布操作”步骤?
我想要一个有意义的名称,例如“发送电子邮件通知”。
更新:
名称在此类中进行了硬编码。使用当前版本的API(3.44),无法重命名它们。
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
是否可以像unstable(MESSAGE)警告消息一样在 Jenkins Blue Ocean 视图中创建警告日志消息,但不将孔构建状态设置为不稳定?
我的意思是此视图中的黄色/橙色日志消息“无法加载依赖项!”:

catchError(message: 'MESSAGE', buildResult: 'SUCCESS', stageResult: 'UNSTABLE') 也无济于事,因为该消息在 Blue Ocean 视图中不可见。
jenkins jenkins-pipeline jenkins-blueocean jenkins-declarative-pipeline
我正在尝试从 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)
请帮忙。
我想使用 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
我有如下声明式管道,它并行运行 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-declarative-pipeline ×10
jenkins ×8
curl ×1
docker ×1
gitversion ×1
groovy ×1
jira ×1
stdout ×1