有没有人有正确的代码示例
configure { ... }
Run Code Online (Sandbox Code Playgroud)
在Jenkins DSL插件中需要阻止设置git稀疏结账吗?
似乎config.xml部分看起来像这样:
<extensions>
<hudson.plugins.git.extensions.impl.CloneOption>
<shallow>false</shallow>
<reference>/build/jenkins/codebase.git</reference>
</hudson.plugins.git.extensions.impl.CloneOption>
<hudson.plugins.git.extensions.impl.SparseCheckoutPaths>
<sparseCheckoutPaths>
<hudson.plugins.git.extensions.impl.SparseCheckoutPath>
<path>BillOfMaterials.yml</path>
</hudson.plugins.git.extensions.impl.SparseCheckoutPath>
<hudson.plugins.git.extensions.impl.SparseCheckoutPath>
<path>jenkins/job/</path>
</hudson.plugins.git.extensions.impl.SparseCheckoutPath>
</sparseCheckoutPaths>
</hudson.plugins.git.extensions.impl.SparseCheckoutPaths>
</extensions>
Run Code Online (Sandbox Code Playgroud) 我正在尝试将利用Jenkins Job DSL插件的代码分解为可重用的部分,并且我怀疑我的问题是Groovy的通用问题,而不是Jenkins特定的问题。例如,我想重用此块的某些部分:
freeStyleJob() {
//generic stuff
name "something"
description "something else"
//custom stuff
scm {
svn {
//etc....
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过将名称和描述放在实用程序方法中(显然,我不仅想在现实生活中做更多的事情)。但是,我找不到合适的语法来创建当前作用域的闭包。这是我认为的样子:
def jobCommonItems() {
return {
//generic stuff
name "something"
description "something else"
}
}
freeStyleJob() {
jobCommonItems().call()
//custom stuff
scm {
svn {
//etc....
}
}
}
Run Code Online (Sandbox Code Playgroud)
(也许有一个closure.delegate =这个在某处)
但是,这不适用于闭包。它适用于方法,如下所示:https : //dzone.com/articles/groovy-closures-owner-delegate
为了说明这一点,下面的测试显示了三种可能的语法组合:
String myString = "Top Level: string"
def myMethod() {
println "Top Level: Method"
}
def myClosure = { println "Top Level: Class"}
class …Run Code Online (Sandbox Code Playgroud) 我对Jenkins和Job DSL插件很陌生。经过一些研究,我发现了如何使用DSL创建作业,现在我正尝试使用DSL删除作业。我知道使用以下代码禁用作业:
//create new job
//freeStyleJob("MyJob1", closure = null);
job("MyJob1"){
disabled(true);
}
Run Code Online (Sandbox Code Playgroud)
运行正常。但是,我找不到在詹金斯删除其他工作的任何方法。
请帮忙!
谢谢!
Jenkins Job DSL插件是一种非常好的方式,可以在repo中存储CI配置,并在分支之间进行更改.
问题是 - 是否有一种自然或接近自然的方式来运行MSTest测试,解析结果并显示它们.
现在我做了一个powershell调用,但这只给了我日志,而不是UI集成.
def testSomeProjectJob = job(testSomeProjectJobName) {
steps {
powerShell("& ${vstest} '${root}/SomeProject/SomeProject.Tests/bin/Debug/SomeProject.Tests.dll' ")
}
}
Run Code Online (Sandbox Code Playgroud)
可能有一个出版商或一个带模板的技巧,或者为JOB DSL编写插件的一些技巧
UPD:使用@daspilker回答,jenkins xUnit插件和archiveXUnit的 MSTest和VSTest的最终脚本模板
job('RunTests') {
steps {
// VSTEST
powerShell("& ${vstest} 'path/to/Tests.dll' /logger:trx ")
// Or MSBUILD
powerShell("& ${msbuild} /testcontainer:'path/to/Tests.dll' ")
}
publishers {
archiveXUnit {
msTest {
pattern('**/*.trx')
// deleteOutputFiles()
}
}
}
}
Run Code Online (Sandbox Code Playgroud) mstest jenkins jenkins-plugins jenkins-job-dsl jenkins-mstest
我想使用Job DSL而不是email-ext插件配置电子邮件通知.
我尝试第一次使用Jenkins Job DSL插件来创建一些基本的作业“模板”,然后再介绍更复杂的内容。
Jenkins在Windows 2012服务器上运行。Jenkins版本是1.650,我们正在使用Job DSL插件版本1.51。
理想情况下,我希望对种子作业进行参数化,以便在运行该种子时,用户可以输入四项内容:作业DSL脚本位置,生成的作业的名称,用于通知失败的Slack通道以及一封电子邮件。故障通知的地址。
前两个很好:我可以在groovy脚本中调用参数,例如,脚本可以理解job("${JOB_NAME}")并使用我在运行种子作业时为作业输入的名称。
但是,当我尝试使用Slack频道执行相同的操作时,groovy脚本似乎不想播放。请注意,如果我指定一个Slack通道而不是尝试调用一个参数,它将正常工作。
我的Job DSL脚本在这里:
job("${JOB_NAME}") {
triggers {
cron("@daily")
}
steps {
shell("echo 'Hello World'")
}
publishers {
slackNotifier {
room("${SLACK_CHANNEL}")
notifyAborted(true)
notifyFailure(true)
notifyNotBuilt(false)
notifyUnstable(true)
notifyBackToNormal(true)
notifySuccess(false)
notifyRepeatedFailure(false)
startNotification(false)
includeTestSummary(false)
includeCustomMessage(false)
customMessage(null)
buildServerUrl(null)
sendAs(null)
commitInfoChoice('NONE')
teamDomain(null)
authToken(null)
}
}
logRotator {
numToKeep(3)
artifactNumToKeep(3)
publishers {
extendedEmail {
recipientList('me@mydomain.com')
defaultSubject('Seed job failed')
defaultContent('Something broken')
contentType('text/html')
triggers {
failure ()
fixed ()
unstable ()
stillUnstable {
subject('Subject')
content('Body')
sendTo {
developers()
requester()
culprits() …Run Code Online (Sandbox Code Playgroud) 我正在尝试为詹金斯编写一个groovy-dsl脚本以生成两个作业:
它们的定义几乎相同。它们之间只有微小的差异。因此,我想重用大多数工作代码,然后进入以下重构场景(请关注第五行的三元运算符):
[
['toolchainsBuild': false],
['toolchainsBuild': true],
].each { Map config ->
config.toolchainsBuild ? job("job1") : matrixJob("job2") {
// job definition follows...for example:
out.println("debug")
steps {
cmake {
buildToolStep {}
}
}
// if (config.toolchainsBuild) {
// ... // different actions, depending on the job type
// }
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用。证明:debug仅在日志文件中打印一次(它应该出现两次,因为我希望定义两个不同的作业)。
我还尝试将三元运算符及其操作数包装在括号中,如下所示:
(config.toolchainsBuild ? job("job1") : matrixJob("job2")) {
// ...
Run Code Online (Sandbox Code Playgroud)
但是,这会导致语法错误:
Processing provided DSL script
ERROR: (script, line 20) No signature of …Run Code Online (Sandbox Code Playgroud) 我可以使用 Jenkins 的 DSL 插件完成下游工作:
https://github.com/jenkinsci/job-dsl-plugin/wiki/Job-reference#downstream
我怎样才能做一个上游工作(同样的事情......只是在不同的地方指定)?
在 UI 中,它位于 Triggers 下:“在构建其他项目后构建”。
我正在尝试在使用Job DSL插件生成的Jenkins作业中设置Artifactory.
配置如下所示:
wrappers {
colorizeOutput 'xterm'
buildName '#${BUILD_NUMBER}-release'
artifactoryGenericConfigurator {
// Repository to deploy to.
details {
artifactoryName('artifactory.foo.bar.com')
artifactoryUrl('https://artifactory.foo.bar.com/artifactory')
deployReleaseRepository {
keyFromSelect('')
keyFromText('')
dynamicMode(false)
}
deploySnapshotRepository {
keyFromSelect('')
keyFromText('')
dynamicMode(false)
}
resolveReleaseRepository() {
keyFromText('')
keyFromSelect('')
dynamicMode(false)
}
resolveSnapshotRepository() {
keyFromText('')
keyFromSelect('')
dynamicMode(false)
}
userPluginKey('')
userPluginParams('')
useSpecs(true)
uploadSpec {
spec('''{
"files": [
{
"pattern": "app.tar.gz",
"target": "myrepo/app/${BUILD_NUMBER}-release",
"flat" : "false"
}
]
}''')
filePath(null)
}
downloadSpec {
spec('')
filePath(null)
}
}
deployPattern('')
deployBuildInfo(true)
includeEnvVars(false)
discardOldBuilds(false)
discardBuildArtifacts(false) …Run Code Online (Sandbox Code Playgroud) 我有一个 Jenkins 管道作业(除其他外)使用Job DSL plugin创建另一个 pipelineJob (以在之后清理所有内容) 。
pipeline {
agent { label 'Deployment' }
stages {
stage('Clean working directory and Checkout') {
steps {
deleteDir()
checkout scm
}
}
// Complex logic omitted
stage('Generate cleanup job') {
steps {
build job: 'cleanup-job-template',
parameters: [
string(name: 'REGION', value: "${REGION}"),
string(name: 'DEPLOYMENT_TYPE', value: "${DEPLOYMENT_TYPE}")
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我只需要构建这个新生成的作业一次,然后,如果构建成功,则应删除该作业。
pipeline {
stages {
stage('Cleanup afterwards') {
// cleanup logic
}
}
post {
success {
// delete this …Run Code Online (Sandbox Code Playgroud) 我有一个DSL脚本来创建我的Jenkins管道作业。
String[] repos =
['xxx']
for (int i = 0; i < repos.length; i++) {
repoName = repos[i];
multibranchPipelineJob('PIPELINE-'+repoName) {
branchSources {
git {
remote('git@github.com:yyy/'+repoName+'.git')
credentialsId('112233445566')
}
}
description ("""<p> <b>generate by DSL - DO NOT CHANGE Manually </b> <p>""")
triggers {
periodic(2)
}
orphanedItemStrategy {
discardOldItems {
numToKeep(0)
daysToKeep(0)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)