Iam working on creating a Build promotion using Jenkins-JOb DSL-Paramterized build.
My Scripts looks as,
Job('sampleMavenProj') {
triggers { scm("*/5 * * * *") }
scm { git('file:///work/SampleTest') }
rootPOM("pom.xml")
goals('clean')
wrappers {
preBuildCleanup()
release {
preBuildSteps {
maven {
rootPOM('pom.xml')
goals("build-helper:parse-version")
goals("versions:set")
}
}
postSuccessfulBuildSteps {
maven {
rootPOM('pom.xml')
goals("package")
}
}
}
}
}
promotions("") {
promotion("Development") {
icon("star-red")
conditions {
manual('')
}
actions {
shell('echo This is a DownStream Job;')
}
}
But when i build the JOb , it fails saying ,
Processing provided DSL script
ERROR: (script, line 31) No signature of method: script.promotions() is applicable for argument types: (java.lang.String, script$_run_closure2) values: [, script$_run_closure2#4fcac57f]
Finished: FAILURE
Which is at , promotions area. Please let me on this.
Thanks for all the responses.
Seems like the Prompted build plugin that i am using is not working. I have to use the 2.26 version from"https://github.com/Russell-IO/promoted-builds-plugin/releases" to use the code. This solved my issues. thanks
Related
I am writing a Jenkinsfile and trying to enable deployment from the branch names(starting with master and hotfix). How can I do that? Below is my groovy code. This works if I specify only one branch. How can I do that for multiple branches?
// Create and Deploy to STAGE Environment
stage ('Create and Deploy to k8s stage Environment') {
when {
allOf {
expression {
branch_name.startsWith('master')
}
}
}
options {
skipDefaultCheckout()
}
steps {
withCredentials([string(credentialsId: "$env.K8S_STAGE_NS_TOKEN" , variable: 'STAGE_TOKEN')]) {
kubernetesDeploy(hcEnv: 'stage', hcToken: "${STAGE_TOKEN}")
}
}
}
The below code doesn't work if I specify 2 branch names but the above one works.
// Create and Deploy to PROD Environment
stage ('Create and Deploy to k8s production Environment') {
when {
allOf {
expression {
branch_name.startsWith('hotfix')
branch_name.startsWith('master')
}
}
}
options {
skipDefaultCheckout()
}
steps {
withCredentials([string(credentialsId: "$env.K8S_PROD_NS_TOKEN" , variable: 'PROD_TOKEN')]) {
kubernetesDeploy(hcEnv: 'prod', hcToken: "${PROD_TOKEN}")
}
}
}
You can use this
expression { return (env.GIT_BRANCH.startsWith('origin/master') || env.GIT_BRANCH.startsWith('hotfix'))}
OR
you can also try this
expression { return (env.BRANCH_NAME.startsWith('origin/master') || env.GIT_BRANCH.startsWith('origin/hotfix'))}
I am not sure if your branch name starts with origin or without origin so use it according to you. I would suggest instead of startsWith use contains.
Also instead of allOf i guess you need anyOf because you want to run stage for either if it's master branch or hotfix branch and both at the same time can't be true so
I have the following pipeline:
pipeline {
agent any
stages {
stage('CI') {
parallel {
stage('גמלאות') {
steps {
input message: "Pass Sanity?"
}
}
stage('וועדות') {
steps {
input message: "Pass Sanity?"
}
}
stage('מבוטח') {
steps {
input message: "Pass Sanity?"
}
}
}
}
}
}
I'm expecting to see in the UI 3 option to select in each stage. but getting only one instead.
If I will look at tradinall console then I will be able to select if to proceed or to abort.
Is there a way to get this function thru the UI?
Here is an example of the UI:
It seems that the code is correct. The problem is with the Jenkins plugin.
I mooved to work with Blueocean plugin, and now it seems to work fine:
does this https://jenkinsci.github.io/job-dsl-plugin/#path/pipelineJob-environmentVariables-groovy actually work?
Probably more of an plugin issue.
groovy scripts to set env vars seem to work for freestyle job. But I can't get them to work with pipeline jobs.
They don't cause any errors but the environment variable won't get set either.
Anyone else played around with it?
pipelineJob('example') {
environmentVariables {
env('ONE', '1')
env('TWO', '2')
groovy('''
def a = 1
return [THREE: 3 * a]
''')
}
definition {
cps {
script('''
pipeline {
agent any
stages {
stage('Env') {
steps {
sh 'env'
}
}
}
}
''')
}
}
}
thx
I have a setup at work where the vSphere host are manually restarted before execution of a specific jenkins job, as a noob in the office I automated this process by adding a extra build step to restart vm's with the help of https://wiki.jenkins-ci.org/display/JENKINS/vSphere+Cloud+Plugin! (vSphere cloud plugin).
I would like to now integrate this as a pipeline code, please advise.
I have already checked that this plugin is Pipeline compatible.
I currently trigger the vSphere host restart in pipeline by making it to remotely trigger a job configured with vSphere cloud plugin.
pipeline {
agent any
stages {
stage('Restarting vSphere') {
steps {
script {
sh "curl -v 'http://someserver.com/job/Vivin/job/executor_configurator/buildWithParameters?Host=build-114&token=bonkers'"
}
}
}
stage('Setting Executors') {
steps {
script {
def jenkins = Jenkins.getInstance()
jenkins.getNodes().each {
if (it.displayName == 'brewery-133') {
echo 'brewery-133'
it.setNumExecutors(8)
}
}
}
}
}
}
}
I would like to integrate the vSphere cloud plugin directly in the Pipeline code itself, please help me to integrate.
pipeline {
agent any
stages {
stage('Restarting vSphere') {
steps {
vSphere cloud plugin code that is requested
}
}
}
stage('Setting Executors') {
steps {
script {
def jenkins = Jenkins.getInstance()
jenkins.getNodes().each {
if (it.displayName == 'brewery-133') {
echo 'brewery-133'
it.setNumExecutors(8)
}
}
}
}
}
}
}
Well I found the solution myself with the help of 'pipeline-syntax' feature found in the menu of a Jenkins pipeline job.
'Pipeline-syntax' feature page contains syntax of all the possible parameters made available via the API of the installed plugins of a Jenkins server, using which we can generate or develop the syntax based on our needs.
http://<jenkins server url>/job/<pipeline job name>/pipeline-syntax/
My Jenkinsfile (Pipeline) now look like this
pipeline {
agent any
stages {
stage('Restarting vSphere') {
steps {
vSphere buildStep: [$class: 'PowerOff', evenIfSuspended: false, ignoreIfNotExists: false, shutdownGracefully: true, vm: 'brewery-133'], serverName: 'vspherecentral'
vSphere buildStep: [$class: 'PowerOn', timeoutInSeconds: 180, vm: 'brewery-133'], serverName: 'vspherecentral'
}
}
stage('Setting Executors') {
steps {
script {
def jenkins = Jenkins.getInstance()
jenkins.getNodes().each {
if (it.displayName == 'brewery-133') {
echo 'brewery-133'
it.setNumExecutors(1)
}
}
}
}
}
}
}
I'm relatively new to Jenkins pipelines, but having implemented already a few, I've realised I need to start using jenkins shared library before I go mad.
Have already figured out how to define some repetitive steps in the library and call them with less clutter from Jenkinsfile, but not sure if the same thing can be done for the entire post build section (thought I've read about to how to define the entire pipeline in the lib and similar), as this is pretty much static end of every single pipeline code:
#Library('jenkins-shared-library')_
pipeline {
agent none
stages {
stage ('System Info') { agent any
steps { printSysInfo() }
}
stage ('Init'){ agent {label 'WinZipSE'}
steps { init('SCMroot') }
}
stage('Build') { agent any
steps { doMagic() }
}
}
// This entire 'post {}' section needs to go to a shared lib
// and be called just with a simple methed call, e.g.
// doPostBuild()
post {
always {
node ('master') {
googlechatnotification (
message: '[$BUILD_STATUS] Build $JOB_NAME $BUILD_NUMBER has finished',
url: 'id:credential_id_for_Ubuntu')
step (
[$class: 'Mailer',
recipients: 'sysadmins#example.com me#example.com',
notifyEveryUnstableBuild: true,
sendToIndividuals: true]
)
}
}
success {
node ('master') {
echo 'This will run only if successful'
}
}
failure {
node ('master') {
echo 'This will run only if failed'
}
}
// and so on
}
}
I just dunno how to syntactically achieve that. For sure, I can define the entire post build section an a lib/var like: doPotBuild.groovy
def call () {
post {...}
}
but how I will eventually call it from within my Jenkinsfile outside of that defined post {} build block section (AKA stages).
I can call it within some stage('post build){doPostBuild()}, but it won't serve the way how the true post {} section is supposed to work, e.g. it won't get executed it there was failure in one of the previous stages.
Any thoughts on that and mainly working examples?
I am not entirely if this will work as I don't use declarative pipelines, so am unsure how rigid the top level structure is. But I would revert to a script block.
#Library('jenkins-shared-library')_
pipeline {
agent none
stages {
stage ('System Info') { agent any
steps { printSysInfo() }
}
stage ('Init'){ agent {label 'WinZipSE'}
steps { init('SCMroot') }
}
stage('Build') { agent any
steps { doMagic() }
}
}
// This entire 'post {}' section needs to go to a shared lib
// and be called just with a simple methed call, e.g.
// doPostBuild()
script {
doPostBuild()
}
}