标签: jenkins-pipeline

Jenkins 作业通过构建分离工作区

我们有一项工作,在构建过程中在工作区文件夹中生成一些 html 文件。我们的目标是在构建完成后获取这些文件并对其进行压缩。

该工作的第一步是清理工作区 - 确保不存在以前版本中的文件。

当我们开始构建并且有人开始单独的构建时,我们的问题就出现了 - 工作区被擦除。两个构建都会生成这些 html,并且内容会从不同的构建中混合起来。

如果有人知道如何将每个构建分开以拥有自己的工作空间,将会很高兴分享它。我希望这仅适用于一份工作。其他工作必须保留在共享工作空间中。

jenkins jenkins-pipeline

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

Jenkins - 设置阶段超时并继续下一阶段

我有一个在远程节点运行一个 shell 脚本的阶段。如果脚本执行时间很长,则该阶段应等待一段时间,然后移动到下一个阶段,而不会中止后续阶段。

您能否让我知道实现此目的所需的语法。

jenkins jenkins-cli jenkins-pipeline

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

詹金斯 git checkout 代理不工作

我的 github 存储库中的 Jenkins 文件用于 Jenkins Master/Slave 环境。我需要在远程 Jenkins 从服务器上执行测试命令。在我的声明式管道中,代理的调用方式如下:

stage("Testautomation") {
  agent { label 'test-device' }
    steps {
        bat '''
        @ECHO ON
        ECHO %WORKSPACE%
        ... '''
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Jenkins 执行远程命令之前,它会开始从版本控制中签出。Jenkins Master 上的结帐没有问题并且工作正常。但在这个 Jenkins Slave 上我总是收到此错误消息。

using credential github-enterprise:...
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://...git # timeout=10
Fetching upstream changes from https://...git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials GitHub Enterprise Access Token
 > …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-pipeline

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

Jenkins Pipeline - 在 shell 中插入变量会创建一个新行

我在 jenkins 文件中使用 Choice 参数来选择环境,如下所示:

pipeline {
     agent any
     parameters {
    choice(
        name: 'ENVIRONMENT_URL',
        choices: "https://beta1.xyz.com\nhttps://beta2.xyz.com\nhttps://beta3.xyz.com",
        description: 'interesting stuff' )
  }
Run Code Online (Sandbox Code Playgroud)

在本Stage节中,我有以下内容

 stage('execute tests') {
            steps {
                script {
                        sh """URL=${ENVIRONMENT_URL} npm run e2e:tests"""
                        sh 'echo -e "\nTest Run Completed.\n"'   
                }
             }   
            }
Run Code Online (Sandbox Code Playgroud)

但是,当我通过选择添加的选择参数来运行管道作业时,将执行以下操作(插入的选择参数会创建换行符):

+ URL=https://beta1.xyz.com
+ npm run e2e:tests
Run Code Online (Sandbox Code Playgroud)

使用变量会导致换行,这就是导致问题的原因。我尝试了不同的方法来避免换行。尝试使用变量,但这没有帮助。尝试使用不同的报价,但也没有。

我该怎么做才能避免断线?

groovy jenkins jenkins-pipeline

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

如何避免在 Jenkins 中构建已创建的分支?

在我们的团队中,我们通过 JIRA 创建带有 Bitbucket 集成的分支。因此,分支被推送到 Bitbucket,然后通常由开发人员签出以进行工作。

推送到 Bitbucket 会触发 Jenkins 中分支的构建。此构建是不必要的,因为它构建已经构建的基础分支的最新提交。我们如何避免/跳过此构建?我们使用声明性管道。

git bitbucket jenkins jenkins-pipeline

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

无法读取架构文档“http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd”

我已经在 J​​enkins 中安装了 Liquibase runner 1.3.0 插件,并尝试执行执行“diffChangeLog”命令后得到的 liquibase 更改日志脚本文件。在执行脚本文件时,出现Failed to read schema document ' http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd '异常。我已经检查了我的更改日志文件,它具有下面提到的标题。

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xmlns:pro="http://www.liquibase.org/xml/ns/pro"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
                        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
                        http://www.liquibase.org/xml/ns/pro
                        http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd
                        http://www.liquibase.org/xml/ns/dbchangelog
                        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
Run Code Online (Sandbox Code Playgroud)

但现在在这里,当我将标头中两个位置的“3.8”替换为“3.5”时,它就成功执行了。我希望仅使用“3.8”执行此操作。请帮忙。

liquibase jenkins jenkins-pipeline liquibase-sql

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

如何在 Jenkins 管道中获取 Docker 镜像对象?

我在 Jenkins 管道中有这段代码,它运行

def myImage = docker.build(...)
myImage.withRun(...) {img ->
    println img.id
}
Run Code Online (Sandbox Code Playgroud)

IOWdocker.build()返回一些了解该withRun()函数的 Jenkins 管道 Docker 对象。

但使用这段代码我每次都必须构建 Docker 镜像。

如果我想从注册表中提取 Docker 映像该怎么办?如何获得withRun()也具有该功能的等效 Jenkins 管道 Docker 对象?IOW,我怎样才能使这个(伪)代码工作?我说“伪”是因为docker.pull()我不知道吗?

docker.withRegistry(...)
  def myImage = docker.pull('someImage:latest')
  myImage.withRun() (...) {img ->
    println img.id
  }
}
Run Code Online (Sandbox Code Playgroud)

jenkins docker jenkins-pipeline

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

Jenkins 管道 mvn:找不到命令

我的测试作为 Maven 项目运行良好。它从 Git 获取代码。

我想在管道中执行相同的操作,因此我为管道项目编写了以下脚本。

pipeline {
    agent any
    options {
        timestamps()
    }
    stages{ 
        stage('Just Testing') {
            steps {
                git "https://github.com/myRepo.git"
                script{
                        sh 'mvn test'
                }
                step([$class : 'Publisher', reportFilenamePattern : "**/testng-results.xml"])
            }
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

但是当我执行时,我收到 mvn: command not found 错误 Java and Maven path is set正确在全局工具配置中(我确信因为我能够执行其他maven项目,只有管道失败。)

控制台输出:

Running on Jenkins in /Users/abacker/.jenkins/workspace/parallelTestNG
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Just Testing)
[Pipeline] git
00:03:52  No credentials specified
00:03:52   > git rev-parse --is-inside-work-tree # timeout=10 …
Run Code Online (Sandbox Code Playgroud)

maven jenkins jenkins-pipeline

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

将命令的结果分配给声明性 Jenkinsfile 中的变量

我正在实现声明式 Jenkinsfile,我想运行 Windows 命令并将结果分配给变量。

这是我的代码:

stage('check latest commit') {
    steps {
        script{
            COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'").trim() as String
            echo "${COMMIT}"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在 Jenkins 作业中收到以下日志

c:\Software\JenkinsWorkspace\workspace\TFS - XXX>c:\Software\Git\bin\git.exe log -n 1 --pretty=format:'%H' 
'656669102c187fe390a1e9d72ed47aa2d8528ad6'[Pipeline] }
[Pipeline] // script
Run Code Online (Sandbox Code Playgroud)

因此该命令按预期执行并返回 HEAD 中最新提交的哈希值。伟大的。然而:

[Pipeline] End of Pipeline
java.lang.NullPointerException: Cannot invoke method trim() on null object
    at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48)
Run Code Online (Sandbox Code Playgroud)

在运行结束时,我收到此错误。这意味着命令的结果值为null,即使命令本身产生结果。

如果我不包括修剪,例如:

stage('check latest commit') {
    steps {
        script{
            COMMIT = bat("c:\\Software\\Git\\bin\\git.exe log -n 1 --pretty=format:'%%H'")
            echo "${COMMIT}" …
Run Code Online (Sandbox Code Playgroud)

groovy jenkins jenkins-groovy jenkins-pipeline

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

使用“标签”或在 jenkinsfile 中为 kubernetes-plugin 定义 pod 模板?

一般来说

我在为 Jenkins 使用kubernetes-plugin时尝试使用标签,但我有点困惑。在我的pipeline下面,我尝试parallel使用不同的标签(代理)分步骤构建测试作业。

我已经在 J​​enkins 配置中使用 pod 模板和容器配置了插件,其中我使用与podTemplate定义的管道中相同的设置。

问题

问题是,当我agent label在第 2 阶段使用时,运行的是 jnpl 映像,而不是我在 config 中指向的映像someimage:latest

stage 1我在管道中定义 pod 的地方没有问题,并且所需的图像运行良好。

问题

我做错了什么? 这是我在 Jenkins 中的kubernetes 插件jenkinsfile的配置:

def podTemplate = """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: k8s
    image: someimage:latest
    command:
    - sleep
    args:
    - infinity
    volumeMounts:
      - name: workspace-volume
        mountPath: /home/jenkins/agent
    workingDir: "/home/jenkins/agent"
  volumes:
      - name: "workspace-volume"
        persistentVolumeClaim:
          claimName: "jenkins-worker-pvc" …
Run Code Online (Sandbox Code Playgroud)

jenkins jenkins-plugins kubernetes jenkins-pipeline kubernetes-jenkins-plugin

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