Managing Jenkins with jcli
Tags: jenkins
Published: 2019-10-18 01:32:23

As a developer, I usually use Jenkins like this:

* Find a job which is related to my current work
* Trigger that job
* Check the output of the build log

Sometimes, I might need to check the update center. Maybe a new plugin is needed, or I need to update an existing plugin.
Or, I want to upload a plugin from my computer. For all these cases, I just don't need a UI or even a browser.
I like to use a CLI to complete most of my tasks. For example, I use `kubectl` to manage my Kubernetes cluster,
to create or modify the kubernetes resources. So, I start to think, 'Why not use a CLI to manage my Jenkins?'.

## Why create a new one?

First, I almost forgot about the existing https://jenkins.io/doc/book/managing/cli/[Jenkins CLI], written in Java. Let me introduce how to use that one.

Visit Jenkins page from `http://localhost:8080/jenkins/cli/`. You'll see a command like `java -jar jenkins-cli.jar -s http://localhost:8080/jenkins/ help`. So, a jar file needs to be download.
We can use this command to complete this task `wget http://localhost:8080/jenkins/jnlpJars/jenkins-cli.jar`.

Now you can see that this is not a Linux-style CLI. Please consider some points below:

* The users must have a JRE. This is not convenient for developers who don't use Java.
* The CLI is too wordy. We always need to type `java -jar jenkins-cli.jar -s http://localhost:8080/jenkins/` as the initial command.
* Cannot install it by some popular package manager, like `brew` or `yum`.

Of course, the Java CLI client is more native with Jenkins. But I'd like to use this more easily.
So I decided to create a new CLI tool that would be written in Go and which would natively run on modern platforms.

That's the story of creating `jcli`.

## Features

* Easy to maintain config file for jcli
* Multiple Jenkins support
* Plugins management (list, search, install, upload)
* Job management (search, build, log)
* Open your Jenkins with a browser
* Restart your Jenkins
* Connection with proxy support

## How to get it?

You can clone `jcli` from https://github.com/jenkins-zh/jenkins-cli/[the jenkins-cli repo]. For now, we support 
these three most popular OS platforms: macOS, Linux, and Windows.

### MacOS

You can use brew to install jcli.

```
brew tap jenkins-zh/jcli
brew install jcli
```

### Linux

It's very simple to install jcli into your Linux OS. Just need to execute a command line at below:

```
curl -L https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-linux-amd64.tar.gz|tar xzv
sudo mv jcli /usr/local/bin/
```

### Windows

You can find the latest version by clicking https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-windows-386.tar.gz[here]. Then download the tar file, cp the uncompressed `jcli` directory into your system path.

### How to get started?

It's very simple to use this. Once you get `jcli` on your computer, use this command to generate a sample configuration:

```
$ jcli config generate
current: yourServer
jenkins_servers:
- name: yourServer
  url: http://localhost:8080/jenkins
  username: admin
  token: 111e3a2f0231198855dceaff96f20540a9
  proxy: ""
  proxyAuth: ""
# Goto 'http://localhost:8080/jenkins/me/configure', then you can generate your token.
```

In most cases, you should modify three fields which are `url`, `username` and `token`. OK, I believe you're ready. Please check whether you install the `github` plugin in your Jenkins:

`jcli plugin list --filter name=github`

That's the end. It's still in the very early development stage. Any contribution is welcome.

It was published originally from [jenkins.io](https://jenkins.io/blog/2019/08/30/jenkins-cli/)