It occurred to me that many people do not know that it is possible to trigger Jenkins jobs from the command line. But it is possible and all you need is a SSH client. Here is a short introduction on how to get it working.
Enable the Jenkins SSH daemon ¶
Jenkins includes a implementation of a SSH daemon. This isn’t a alternative to OpenSSH to allow users to gain shell access to a host, but rather it allows people to use their SSH client to interact with Jenkins.
To enable the daemon, head to
Manage Jenkins → Configure Global Security (or
https://<yourjenkins>/configureSecurity) and find the
SSH Server option.
Fixed with a port number, for example
Configure your public SSH key ¶
Your SSH client will need to authenticate itself with the Jenkins server. The recommended option for that is to use public key authentication. Head over to your user configuration page in Jenkins (
https://<yourjenkins>/user/<userName>/configure) and add your public key in the text area under
SSH Public Keys.
Now you’re all set.
Using the SSH client ¶
If you followed the previous steps you should now be able to connect to your Jenkins server using an ssh client:
ssh -l <jenkinsUserName> -p 2020 <jenkinsHost> <command>
To test this you can use
<command>. This will print a list of supported commands.
To make this easier to use, you may want to create a
jenkins bash file in your
$PATH with contents like this:
ssh -l $JENKINS_USER -p $JENKINS_PORT $JENKINS_HOST "$@"
This will then allow you to invoke commands by using
Common use cases ¶
I frequently use this to trigger certain builds. For example, for CrateDB we have a job that can build CrateDB from source and deploys it to a cluster which has monitoring and everything setup. To build the current branch I’m working on I’d push it and then run:
jenkins build crate_dev_release_and_deploy -f -v -p GIT_REVISION=$(git branch --show-current)
Another job that we have lets us compare the performance between two git revisions. I can trigger that like this:
jenkins build CrateDB/compare_version_performance_cluster -f -v -p CRATE_OLD=4.1.x -p CRATE_NEW="latest-nightly" -p SPEC=specs/order_by_no_limit.toml