Declarative pipelines are a popular feature in Jenkins, allowing build processes to be committed alongside the code being built. Jenkinsfiles are essentially Groovy syntax; however, for developers used to relying on a local compile to ensure their code is valid, it can be frustrating to have to wait for Jenkins to attempt to execute their Jenkinsfile before finding syntax errors.
Jenkins provides a solution by making it possible to verify a Jenkinsfile before it is executed. This can be performed manually from the command line, or with IDE plugins to provide a more integrated experience.
In this blog post, we'll look at the Jenkinsfile linting tools available in the Atom editor.
Linting a Jenkinsfile involves a network request to the Jenkins server. There are a variety of ways to make these network connections, but Jenkins typically recommends accessing the server via SSH.
It is important to note here that we are not talking about SSH access to the OS that Jenkins runs on. Rather, Jenkins exposes its own SSH server. The SSH server is enabled in the Jenkins security configuration screen under the
SSH Server section. In the screenshot below I have started the SSH server on port
The next step is to add a user's public key so they can authenticate via SSH. The key is created with the command:
ssh-keygen -t rsa -C "email@example.com"
This will create the public key in the default file
~/.ssh/id_rsa.pub. The contents of this file are then assigned to a Jenkins user by opening the user's details, clicking the
Configure option, and pasting the contents of the public key into the
SSH Public Keys field:
Jenkins also requires the
Pipeline plugin to be installed:
With these changes made, we are ready to configure Atom.
Three packages need to be installed in Atom:
The linter-ui-default package will ask to install a number of dependencies. These are required, so allow them to be installed:
The linter package requires additional configuration to make network connections to Jenkins.
We'll use the
SSH then CLI connection option:
SSH Port and
SSH User@Hostname options must be updated to reflect the custom port that we exposed the Jenkins SSH server on (port
2222) and the name of the Jenkins user that we added our Linux user's public SSH key to:
Linting a Jenkinsfile
With a Jenkinsfile open, display the command palette with cmd-shift-p (macOS) or ctrl-shift-p (Linux/Windows) and select the
Linter: Lint command:
The contents of the Jenkinsfile is then sent to the Jenkins server for validation, and any errors are returned:
Jenkins IDE plugins, like the one we demonstrated in Atom, reduce the feedback time for errors in your Jenkinsfile, allowing you to complete a successful build faster. Because validating Jenkinsfiles requires a connection to the Jenkins server, some work is required to configure a secure connection and define the required credentials, but when this initial configuration is complete, validating your code is done with one command.