9

I do a lot of testing in my Jenkins VM which I have on my local laptop. I found this time-consuming to remove Jenkins and installing again from scratch. It would be better if I have a simple way to restore my Jenkins.

Is there a way to remove all the plugins that I have installed manually and keep the plugins that were installed during Jenkins installation?

030
  • 13,383
  • 17
  • 76
  • 178
Buvanesh Kumar
  • 467
  • 3
  • 5
  • 13

4 Answers4

3

One could also use docker Jenkins LTS. If one wants to start from scratch, just remove the mounted Jenkins home folder and there will be a clean Jenkins in no time.

https://github.com/jenkinsci/docker/blob/master/README.md

030
  • 13,383
  • 17
  • 76
  • 178
2

One could use ansible geerlingguy.jenkins role. When this role is applied, a Jenkins system will be created without any plugins. Subsequently, one could install plugins manually, but also define them in ansible, i.e. plugins as code.

030
  • 13,383
  • 17
  • 76
  • 178
2

One possible approach, although a bit tedious (and a bit dumb), would be to:

  • make a fresh Jenkins installation of the exact same version on another (maybe scrappable) machine
  • get the list of the (default) plugins it ends up with
  • add/remove/update the plugins in the original Jenkins installation to match that list
Dan Cornilescu
  • 6,780
  • 2
  • 21
  • 45
2

I find it strange that nobody mentioned the Configuration as Code plugin. Our solution to this problem is to maintain a base Docker image for jenkins, provisioned with two config files:

  • jenkins.yml
  • plugins.txt

The plugins are installed by the install-plugins.sh script provided by the base Jenkins image:

COPY casc_configs/plugins.txt /usr/share/jenkins/ref/plugins.txt
COPY casc_configs/jenkins.yml /usr/share/jenkins/ref/jenkins.yml
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

and Jenkins itself is configured using the jenkins.yml.

The plugin file is generated from a template:

{% for plugin in jenkins.plugins %}
{{ plugin.name }}:{{ plugin.version }}
{%endfor%}

where the variable jenkins.plugins is a big list of dicts:

jenkins:
  plugins:
    - name: configuration-as-code
      version: 1.14

Doing things this way makes it possible to create and destroy fully configured jenkins instances on the fly. If you want, you can keep the jenkins.yml and plugins.txt on a mount that Jenkins can read when it starts.

Bruce Becker
  • 3,783
  • 4
  • 20
  • 41