Last week we hosted our first ever
Online JAM with the debut
topic of: Jenkins 2.0. Alyssa, our
Events officer, and I pulled together a
series of
sessions focusing on some of the most notable aspects of Jenkins 2 with:
A Jenkins 2.0 keynote from project founder
Kohsuke Kawaguchi
An overview of "Pipeline as Code" from Patrick
Wolf
A deep-dive into Pipeline and related plugins like Multibranch, etc from
Jesse Glick and
Kishore Bhatia
An overview of new user experience changes in 2.0 from
Keith Zantow
A quick lightning talk about documentation by yours truly
Wrapping up the sessions, was Kohsuke again, talking about the road beyond
Jenkins 2.0 and what big projects he sees on the horizon.
The event was really interesting for me, and I hope informative for those who
participated in the live stream and Q&A session. I look forward to hosting more
Virtual JAM events in the future, and I hope you will
join us!
Questions and Answers
Below are a collection of questions and answers, that were posed during the
Virtual JAM. Many of these were answered during the course of the sessions, but
for posterity all are included below.
Pipeline
What kind of DSL is used behind pipeline as code? Groovy or allow freely use
different languages as a user prefer?
Pipeline uses a Groovy-based domain specific language.
How do you test your very own pipeline DSL?
Replay helps in testing/debugging while creating pipelines and at the branch
level. There are some ideas which Jesse Glick
has proposed for testing Jenkinsfile and Pipeline libraries captured in
JENKINS-33925.
Isn’t "Survive Jenkins restart" exclusive to [CloudBees] Jenkins Enterprise?
No, this feature does not need
CloudBees
Jenkins Enterprise. All features shown
during the virtual JAM are free and open source. CloudBees' Jenkins Enterprise
product does support restarting from a specified stage however, and that is not
open source.
How well is jenkins 2.0 integrate with github for tracking job definitions?
Using the
GitHub
Organization Folder plugin, Jenkins can automatically detect a Jenkinsfile in
source repositories to create Pipeline projects.
Please make the ability for re-run failed stages Open Source too :)
This has been passed on to our friends at CloudBees for consideration :)
If Jenkinsfile is in the repo, co-located with code, does this mean Jenkins can
auto-detect new jobs for different branches?
This is possible using the
Pipeline Multibranch plugin.
What documentation sources are there for Pipeline?
Our documentation section contains a number of pagesaround Pipeline.
There is also additional documentation and examples in the plugin’s
git repository and the
jenkinsci/pipeline-examples
repository. (contributions welcome!)
Where we can find the DSL method documentation?
There is generated documentation on jenkins.io which
incldues steps from all public plugins. Inside of a running Jenkins instance,
you can also navigate to
JENKINS_URL/workflow-cps-snippetizer/dslReference
to see the documentation for the plugins which are installed in that instance.
If Pipeline is not support some plugins (there is a lot actually), I needed
SonarQube Runner but unfortunately it’s not supported yet, in Job DSL plugin i
can use "Configure Block" and cover any plugin via XML, how i can achieve the
same with a Pipeline?
Not at this time
Is there a possibility to create custom tooltips i.e. with a quick reference or
a link to internal project documentation? Might be useful i.e. for junior team
members who need to refer to external docs.
Not generally. Though in the case of Pipeline global libraries, you can create
descriptions of vars/functions like standardBuild in the demo, and these will
appear in Snippet Generator under Global Variables.
Oh pipeline supports joining jobs? It’s really good, but I cannot find document
at https://jenkins.io/doc/ could you tell me where is it?
There is a build step, but the Pipeline system is optimized for single-job
pipelines
We have multiple projects that we would like to follow the same pipeline. How
would I write a common pipeline that can be shared across multiple projects.
You may want to look at implementing some additional steps using the
Pipeline Global
Library feature. This would allow you to define
organization-specific extensions to the Pipeline DSL to abstract away common
patterns between projects.
How much flexibility is there with creating context / setting environment
variables or changing / modifying build tool options when calling a web hook /
api to parameterize pipelines for example to target deployments to different env
using same pipeline
Various environment variables are exposed under the env variable in the Groovy
DSL which would allow you to construct logic as simple or as complex as
necessary to achieve your goal.
When you set up the job for the first time, does it build every branch in git,
or is there a way to stop it from building old branches?
Not at this time, the best way to prevent older branches from being built is to
remove the Jenkinsfile in those branches. Alternatively, you could use the
"include" or "exclude" patterns when setting up the SCM configuration of your
multibranch Pipeline. See also
JENKINS-32396.
Similar to GitHub organizations, will BitBucket "projects" (ways of organizing
collections of repos) be supported?
Yes, these are supported via the
Bitbucket
Branch Source plugin.
How do you handle build secrets with the pipeline plugin? Using unique
credentials stored in the credentials plugin per project and/or branch?
This can be accomplished by using the
Credentials
Binding plugin.
Similar to GitHub Orgs, are Gitlab projects supported in the same way?
GitLab projects are not explicitly supported at this time, but the extension
points which the GitHub Organization Folder plugin uses could be extended in a
similar manner for GitLab. See also JENKINS-34396
Is Perforce scm supported by the Pipeline plugin?
As a SCM source for discovering a Jenkinsfile, not at this time. The
P4
plugin does provide some p4 steps which can be used in a Pipeline script
however, see here for documentation.
Is Mercurial supported with multibranch?
Yes, it is.
Can Jenkinsfile detect when it’s running against a pull request vs an approved commit, so that it can perform a different type of build?
Yes, via the env variables provided in the DSL scope. Using an if statement,
one could guard specific behaviors with:
if (env.CHANGE_ID != null) {
/* do things! */
}
Let’s say I’m building RPMs with Jenkins and use build number as an RPM
version/release number. Is there a way to maintain build numbers and leverage
versioning of Jenkinsfile?
Through the env variable, it’s possible to utilize env.BUILD_NUMBER or the
SCM commit ID, etc.
Love the snippet generator! Any chance of separating it out from the pipeline
into a separate page on its own, available in the left nav?
Yes, this is tracked in
JENKINS-31831
Any tips on pre-creating the admin user credential and selecting plugins to
automate the Jenkins install?
There are various configuration
management modules which provide parts of this functionality.
I’m looking at the pipeline syntax (in Jenkins 2.0) how do I detect a
step([…]) has failed and create a notification inside the Jenkinsfile?
This can be done by wrapping a step invocation with a Groovy try/catch block.
See also JENKINS-28119
User Interface/Experience
Is the user experience same as before when we replace the Jenkins.war(1.x to
2.x) in an existing (with security in place) installation?
You will get the new UI features like redesigned configuration forms, but the
initial setup wizard will be skipped. In its stead, Jenkins will offer to
install Pipeline-related functionality.
Is it possible to use custom defined syntax highlighting ?
Within the Pipeline script editor itself, no. It is using the
ACE editor system,
so it may be possible for a plugin to change the color scheme used.
Can you elaborate on what the Blue Ocean UI is? Is there a link or more
information on it?
Blue Ocean is the name of user experience an design project, unfortunately at
this point in time there is not more information available on it.
General
How well this integrate with cloud environment?
The Jenkins controller and agents can run easily in any public cloud environment
that supports running Java applications. Through the
EC2,
JClouds,
Azure, or
any other plugins which extend the cloud
extension
point, it is possible to dynamically provision new build agents on a configured
cloud provider.
Are help texts and other labels and messages updated for other localizations /
languages as well?
Practically every string in Jenkins core is localizable. The extent to which those
strings have been translated depends on contributors by speakers of those
languages to the project. If you want to contribute translations, this
wiki
page should get you started.
Any additional WinRM/Windows remoting functionality in 2.0?
No
Is there a CLI to find all the jobs created by a specific user?
No, out-of-the-box Jenkins does not keep track of which user created which jobs.
The functionality provided by the
Ownership
plugin may be of interest though.
Please consider replacing terms like "master" and "slave" with "primary" and
"secondary".
"slave" has been replaced with "agent" in Jenkins 2.0.
Updated 2020-09-18 : The term "master" is being replaced with "controller".
We’ve been making tutorial videos on Jenkins for awhile (mostly geared toward
passing the upcoming CCJPE). Because of that we’re using 1.625.2 (since that is
what is listed on the exam), but should we instead base the videos on 2.0?
As of right now all of the
Jenkins Certification work done by CloudBees is
focused around the Jenkins LTS 1.625.x.