Jenkins pipeline for building other jobs - jenkins-pipeline

I have four iOS frameworks that I build in Jenkins. The jobs are sdk_ios_f1, sdk_ios_f2, sdk_ios_f3, and sdk_ios_f4. There is an xcode project that uses these frameworks. It is sdk_ios_p.
I want to create a Jenkins pipeline that will build these jobs in order:
pipeline {
agent any
stages {
stage('Desc1') {
steps {
dir('/Users/Shared/Jenkins/Home/workspace/') {
build job: 'sdk_iOS_f1', quietPeriod: 5
build job: 'sdk_iOS_f2', quietPeriod: 5
}
}
}
stage('Desc2') {
steps {
dir('/Users/Shared/Jenkins/Home/workspace/') {
build job: 'sdk_iOS_d3', quietPeriod: 5
build job: 'sdk_iOS_f4', quietPeriod: 5
}
}
}
}
}
The two stages are shown on the Jenkins page and the pipeline starts but it never gets past scheduling the first build (sdk_ios_f1).
Please, what do I need to do in order to run the jobs and in the order listed?
Started by user Smith Smith
[Pipeline] node
Running on Jenkins in
/Users/Shared/Jenkins/Home/workspace/pipeline_all_develops
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Desc1)
[Pipeline] dir
Running in /Users/Shared/Jenkins/Home/workspace
[Pipeline] {
[Pipeline] build (Building sdk_iOS_f1)
Scheduling project: sdk_iOS_f1
(never gets past here)

Fixed! Haha. There was only one executor so the pipeline was blocking all others. I added an executor and all is well.

Related

Jenkins configuration for a project with local project dependencies

I have a automation project which makes use of .jar of a util project. I am very new to Jenkins so can somebody guide me as to how to create a jenkin job and handle local project jar dependencies aswell.
Since this is jenkins pipeline you need to do the following.
Create a repo with a jenkinsfile*
Create a multi branch pipeline job in jenkins and point to your repo.
When a build is started it will interpret your jenkinsfile and execute all the defined steps.
By making use of a .jar what do you mean? Is it an executable on the same machine? In that case add it to your path and use it when executing a shell or a bat script in the jenkinsfile.
More info here: https://www.jenkins.io/doc/book/pipeline/
*Example jenkinsfile:
pipeline {
agent any
options {
//Discard old builds, not necessary but nice to have
buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '20'))
}
environment {
// Example of how to retrieve credentials and set them as environment variables
EXAMPLE_CREDENTIAL= credentials('EXAMPLE_CREDENTIAL')
}
stages {
stage('A build step') {
steps {
// do your stuff here, this can also be divided into several stages like one for building the code and one for executing it
}
}
}
// Post build actions, e.g archiving, clean up etc
post {
always {
archiveArtifacts artifacts: '**/*.*', fingerprint: true
deleteDir()
}
}
}
I would not build in dependencies to local projects. If it's just an executable .jar file you can add it as a secret file the same way you add credentials and while executing the job copy it to your workspace like this:
environment {
FILE = credentials('my_file')
}
stages {
stage('Preperation'){
steps {
// Copy your fie to the workspace
sh "cp ${FILE} ${WORKSPACE}"
// Verify the file is copied.
sh "ls -la"
}
}
}
An alternative could be adding the file to your path and access the executable via the command line when executing the job.
If you want the whole project I would definitely check that out. I.e you need to add a a shell command for checking the project out.
Thanks Jan for your direction. I achieved output with the following code:
pipeline
agent any <br/>
stages {<br/>
stage('Building dependent project') { <br/>
steps {<br/>
echo "Building dependent project"<br/>
git (
url: 'https:**********.git',
credentialsId: '***********************',
branch: "master"
)
sh "mvn clean install -DskipTests"
}
}
stage('Building and testing main Project') {
steps {
git (
url: 'https://************.git',
credentialsId: '******************',
branch: "exp3"
)
sh "mvn clean install -Dapp=${App} -Denv=${Envir} -Dversion=${Version}"
}
}
}
}

Jenkins maven project violation report in pipeline project

I am trying to convert jenkins maven project to pipeline project, we have mvn clean install step and next violation plugin can someone help me How to include violation report in pipeline project (check style and findbugs)
In declarative style, using the new Warnings Next Generation plugin, you would do something like
pipeline {
agent any
stages {
... pre-conditions & other stuff previously handled by your jenkins maven job ...
stage('Build') {
steps {
withMaven {
sh 'mvn clean install'
}
}
}
... post-conditions previously handled your jenkins maven job ...
}
post {
always {
recordIssues(
enabledForFailure: true, aggregatingResults: true,
tools: [java(), checkStyle(pattern: 'checkstyle-result.xml', reportEncoding: 'UTF-8'), findBugs(pattern: 'findbugs.xml')]
)
}
}
}
See the pipeline documentation page for more details about syntax etc

Why is Gradle Plugin not collecting build scan in Jenkins file

I have a Jenkinsfile based pipeline which does a build using gradle, which then produces build scan that goes in console output. I found a Jenkins plugin (https://wiki.jenkins.io/display/JENKINS/Gradle+Plugin) that scans the console and nicely displays all build scan links.
When I integrated in my Jenkinsfile based pipeline it does not work.
Here the Jenkins file:
node {
// This displays colors using the 'xterm' ansi color map.
try {
wrap([$class: 'BuildScanBuildWrapper']) {
stage "Create build output"
println "Doing gradle build"
sh "cd projects/ospackage-plugin/ && ./gradlew -I ./init.gradle tasks"
}
}
catch (err) {
println "FAILURE: ${err}"
throw err
}
}
Starting with the plugin version 1.33, it is now possible to collect build scan links from pipeline Jobs: https://plugins.jenkins.io/gradle#GradlePlugin-CapturingbuildscansfromJenkinsPipeline
Add findBuildScans() to the end of your pipeline script:
node {
...
}
findBuildScans()

Declarative Jenkisfile trigger downstream pipeline when dependency is built

Is there any way to use the trigger downstream pipeline function when a dependency is built from the Pipeline Maven Integration plugin in a declarative Jenkisfile?
There is a promising TODO on the Jenkis plugin site.
Using "withMaven" with "docker.image(...).inside{...}" to a Jenkins Declarative Pipeline
TODO provide a sample with Jenkins Declarative Pipeline
Has anybody done that yet?
In my use case, I would like to trigger all downstream pipelines when a snapshot is built without using the GUI (I would prefer an infrastructure as code approach).
I'm not entirely sure, where the exact problem should be. Theoretically it should be
pipeline {
agent {
docker {
image 'openjdk:8-jdk'
}
}
stages {
stage('Test') {
withMaven() {
sh 'mvn clean install'
}
}
}
}
Correct syntax would be to use $MVN_CMD in the withMaven(). That will load the maven spy of the Jenkins Maven plugin.
pipeline {
agent {
docker {
image 'openjdk:8-jdk'
}
}
stages {
stage('Test') {
withMaven() {
sh '$MVN_CMD clean install'
}
}
}
}

Jenkinsfile error- java.lang.NoSuchMethodError: No such DSL method 'withMaven' found among steps

I am currently trying to implement pipeline in jenkins using jenkinsfile and i am executing a maven project on windows machine. I am creating a pipeline job in jenkins and i have checked in this file in my github repository and when i am running the job in jenkins , i am getting following error.
My jenkinsfile:
pipeline {
agent any
stages {
stage('Compile stage') {
steps {
maven(maven : 'Maven_3.5.2'){
bat "mvn clean compile"
}
}
}
stage('testing stage') {
steps {
maven(maven : 'Maven_3.5.2'){
bat "mvn test"
}
}
}
stage('deployment stage') {
steps {
maven(maven : 'Maven_3.5.2'){
bat "mvn deploy"
}
}
}
}
}
I am getting below error when i am running it through jenkins job-
Jenkins error:
java.lang.NoSuchMethodError: No such DSL method 'withMaven' found
among steps [archive, bat, build, catchError, checkout, deleteDir,
dir, dockerFingerprintFrom, dockerFingerprintRun, echo, emailext,
emailextrecipients, envVarsForTool, error, fileExists, getContext,
git, input, isUnix, library, libraryResource, load, mail, milestone,
node, parallel, powershell, properties, pwd, readFile, readTrusted,
resolveScm, retry, script, sh, sleep, stage, stash, step, svn,
timeout, timestamps, tm, tool, unarchive, unstash,
validateDeclarativePipeline, waitUntil, withContext, withCredentials,
withDockerContainer, withDockerRegistry, withDockerServer, withEnv,
wrap, writeFile, ws] or symbols [all, allOf, always, ant,
antFromApache, antOutcome, antTarget, any, anyOf, apiToken,
architecture, archiveArtifacts, artifactManager, authorizationMatrix,
batchFile, booleanParam, branch,
Any help?
This means you don't have withMaven as an available DSL method. Most of the time this means you don't have a plugin installed. In this case, the Pipeline Maven Integration plugin is required. https://plugins.jenkins.io/pipeline-maven/
Try this:
pipeline {
agent any
tools {
maven 'Maven_3.5.2'
}
stages {
stage('Compile stage') {
steps {
bat "mvn clean compile"
}
}
stage('testing stage') {
steps {
bat "mvn test"
}
}
stage('deployment stage') {
steps {
bat "mvn deploy"
}
}
}
}
Reference: https://jenkins.io/doc/book/pipeline/syntax/
On top of Rob Hales' answer, it is called "Pipeline Maven Integration Plugin" in Jenkins ver. 2.73.3 or later
You need to install all listed "pipeline" plugin and error no longer will be there.

Resources