我们有一项工作,在构建过程中在工作区文件夹中生成一些 html 文件。我们的目标是在构建完成后获取这些文件并对其进行压缩。
该工作的第一步是清理工作区 - 确保不存在以前版本中的文件。
当我们开始构建并且有人开始单独的构建时,我们的问题就出现了 - 工作区被擦除。两个构建都会生成这些 html,并且内容会从不同的构建中混合起来。
如果有人知道如何将每个构建分开以拥有自己的工作空间,将会很高兴分享它。我希望这仅适用于一份工作。其他工作必须保留在共享工作空间中。
我有一个在远程节点运行一个 shell 脚本的阶段。如果脚本执行时间很长,则该阶段应等待一段时间,然后移动到下一个阶段,而不会中止后续阶段。
您能否让我知道实现此目的所需的语法。
我的 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 文件中使用 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)
使用变量会导致换行,这就是导致问题的原因。我尝试了不同的方法来避免换行。尝试使用变量,但这没有帮助。尝试使用不同的报价,但也没有。
我该怎么做才能避免断线?
在我们的团队中,我们通过 JIRA 创建带有 Bitbucket 集成的分支。因此,分支被推送到 Bitbucket,然后通常由开发人员签出以进行工作。
推送到 Bitbucket 会触发 Jenkins 中分支的构建。此构建是不必要的,因为它构建已经构建的基础分支的最新提交。我们如何避免/跳过此构建?我们使用声明性管道。
我已经在 Jenkins 中安装了 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”执行此操作。请帮忙。
我在 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) 我的测试作为 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) 我正在实现声明式 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) 我在为 Jenkins 使用kubernetes-plugin时尝试使用标签,但我有点困惑。在我的pipeline
下面,我尝试parallel
使用不同的标签(代理)分步骤构建测试作业。
我已经在 Jenkins 配置中使用 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
jenkins ×10
jenkins-pipeline ×10
groovy ×2
bitbucket ×1
docker ×1
git ×1
jenkins-cli ×1
kubernetes ×1
liquibase ×1
maven ×1