在Jenkins(Freestyle)中创建新项目时,可以在“源代码管理”下选择多个Git存储库。
我想创建一个构建后操作,将两个存储库中的文件归档为工件。我在每个存储库上单击了“高级...”,以便为每个存储库命名,但当我检查工作区时,我仍然只看到最新的存储库。
有关如何在工作区上查看两个存储库的任何提示?
我需要创建一个 jenkins 作业来将包发布到 npmjs.com。包源代码位于 github 存储库中。
我成功地从我的电脑上发布了包,在控制台中执行“npmpublish”命令,但使用 jenkins 时遇到错误。
这就是我在詹金斯工作中所做的:
指定github项目的路径。
添加了“执行 Windows 批处理命令”。剧本:
git checkout master
git pull
npm publish
Run Code Online (Sandbox Code Playgroud)
控制台输出:
C:\Program Files (x86)\Jenkins\workspace\js-agent-cucumber-release>git checkout master
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Previous HEAD position was fbd7040 Update package.json
Switched to branch 'master'
C:\Program Files (x86)\Jenkins\workspace\js-agent-cucumber-release>git pull
Updating 27de403..fbd7040
Fast-forward
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
C:\Program Files (x86)\Jenkins\workspace\js-agent-cucumber-release>npm publish …Run Code Online (Sandbox Code Playgroud) 在我的代码中,我有一个解析日志文件并返回结果列表的方法。如果没有 NonCPS,它可以完美工作并返回正确的值。这个方法是从管道阶段调用的,我得到了 java.io.NotSerializedException: java.util.regex.Matcher 这就是我添加 @NonCPS 注释的原因。不再抛出异常,但 log_parser 方法不能正常工作。现在它总是返回整个文件 - 即使删除返回 result_list。调用此方法的结果始终是文件。
@NonCPS
def log_parser(String filename){
def result_list = []
def match_f, match_s
def lines = readFile(filename).readLines()
for( line in lines ) {
match_f = (line =~ /(?<=Failures: )[^ ]+/ )
match_s = (line =~ /(?<=Skips: )[^ ]+/ )
if( match_f ) {
result_list[1] = (match_f[0]).replace(",", "") }
if( match_s ) {
result_list[2] = (match_s[0]).replace(",", "") }
}
return result_list
}
Run Code Online (Sandbox Code Playgroud) 正如您从代码中看到的,我想从数组中获取最后 5 个构建。
我问自己,如果数组中只有 4 个或 0 个构建,会发生什么情况。
我可能会得到一个空引用,并且 Jenkins 脚本将会失败。
关于如何避免这种情况并且仅使用我可以获得的构建数量(最多 5 个)有什么建议吗?
hi.getItem(projectname).getItem(jobname).getItem(branchname).getBuilds()[-5,-4,-3,-2,-1]{ build ->
def exec = build.getExecutor()
if (build.number != currentBuild.number && exec != null) {
exec.interrupt(
Result.ABORTED,
new CauseOfInterruption.UserInterruption(
"Aborted by #${currentBuild.number}"
)
)
println("Aborted previous running build #${build.number}")
} else {
println("Build is not running or is current build, not aborting - #${build.number}")
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试访问 Jenkins 管道中的 env 变量,并希望在同一管道中执行但步骤不同的 Shell 脚本中使用它,
pipeline {
agent any
tools {
maven 'M2'
}
environment {
stable_revision = sh(script: 'curl -H "Authorization: Basic $base64encoded" "https://xyz.sad" | jq -r "name"', returnStdout: true)
}
stages {
stage('Initial-Checks') {
steps {
echo "Stable Revision: ${env.stable_revision}" //displays the value
bat "sh && sh undeploy.sh"
}}
...
}}
Run Code Online (Sandbox Code Playgroud)
这是一个示例 Shell 脚本,它有很多行,但我在仅访问上述变量时遇到问题stable_revision,
#!/bin/bash
echo xyz = ${stable_revision} #### this gives the right value xyz = 22
echo xyz2 = ${stable_revision}/d ### here …Run Code Online (Sandbox Code Playgroud) 对于詹金斯来说是全新的,所以请原谅任何菜鸟错误。我有一个带有以下代码的管道:
pipeline {
agent any
stages {
stage('Ok') {
steps {
echo "Ok"
}
}
}
post {
always {
emailext (
subject:'Jenkins Build Test for XUSDK',
mimeType: 'text/html',
to: 'testuser@example.com',
recipientProviders: [[$class: 'DevelopersRecipientProvider'],[$class: 'RequesterRecipientProvider']],
body: 'Testing Jenkins sending an email message after building a job.'
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,并向现场收件人发送一封电子邮件to。但是,如果我将该值更改为:
to:'testuser'@example.com','testuser2@example.com',
Run Code Online (Sandbox Code Playgroud)
构建失败,我收到此错误:
WorkflowScript: 14: Arguments to "emailext" must be explicitly named. @ line 14, column 11.
emailext (
Run Code Online (Sandbox Code Playgroud)
我的 Google-fu 失败了,我找不到解决方案。检查SO,其他答案表明这是向多个收件人发送电子邮件的正确方法。任何帮助,将不胜感激。
它是脚本化的管道:
stage('check negations') {
def someVar = false
println someVar
println ! someVar
env.skip = false
println env.skip
println ! env.skip
}
Run Code Online (Sandbox Code Playgroud)
我期望它给出
false
true
false
true
Run Code Online (Sandbox Code Playgroud)
但它给出了
false
true
false
false
Run Code Online (Sandbox Code Playgroud)
如何?
它对于非环境变量可以正常工作。当 env.skip 设置为 true 时,它甚至可以正常工作。如何?
假设我有一个简单的 Jenkins 管道文件,如下所示:
pipeline {
agent any
stages {
stage('Test') {
steps {
sh ...
}
}
stage('Build') {
steps {
sh ...
}
}
stage('Publish') {
when {
buildingTag()
}
steps {
sh ...
send_slack_message("Built tag")
}
}
}
post {
failure {
send_slack_message("Error building tag")
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于每天都有很多非标签构建,我不想发送任何有关非标签构建的松弛消息。但对于标签构建,我想发送成功消息或失败消息,无论它在哪个阶段失败。
所以对于上面的例子,我想要:
据我所知,Jenkins 管道语法中没有“条件后部分”这样的东西,这确实可以帮助我。所以我的问题是,还有其他方法可以做到这一点吗?
我是 Jenkins 管道的新手,并试图了解如何限制“整个”管道,这基本上意味着将发生以下情况:
1)我将能够运行同一管道最大并发运行数,例如MAX_CONCURRENT_RUNS= 2
2)每次运行(本质上是构建)都可以有自己的参数,具有以下“额外要求”,即两个(或更多)不同的构建可以(如果需要)发送给它的相同参数。
3) 在特定时间点已经存在管道 MAX_CONCURRENT_RUNS的构建(运行)的情况下,MAX_CONCURRENT_RUNS+1 运行将“保留”自身,直到第一个当前运行的构建终止,然后才开始执行。
我已经查看了这个问题以及这个问题,但是它们都“不完全”适用于我的情况(要求)。
我正在使用 Jenkins 服务器版本2.176.1
我似乎无法使用 IIS 为我的 Jenkins 正确设置反向代理。
一切正常,但我无法让该消息消失!运行“administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup”不会返回 200.. 但实际上返回 404。
我还使用插件 Blue Ocean,我注意到当通过反向代理访问 Jenkins 时运行管道时,我看不到实时更新!我对此进行了深入研究,发现它通常是由于错误的 Revery 代理设置造成的。如果我通过本地主机访问 jenkins,我可以看到 Blue Ocean Pipeline 实时更新,所以一定是设置错误!
我得到了什么:
我有 HTTPS 设置,所以我的目标是:转到 jenkins.example.com,它将重定向到https://jenkins.example.com,这又是加载 jenkins 的反向代理。
我的网络配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules useOriginalURLEncoding="false">
<!-- Enforces redirection of all HTTP traffic to HTTPS -->
<rule name="Enforce HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
<rule name="ReverseProxyToLocalJenkinsRule" stopProcessing="true">
<match url="(.*)" …Run Code Online (Sandbox Code Playgroud) jenkins ×10
groovy ×2
bash ×1
concurrency ×1
email ×1
iis ×1
javascript ×1
npm ×1
package ×1
publishing ×1
shell ×1
throttling ×1