#4 Add docs
This commit is contained in:
		
							parent
							
								
									7b0778552a
								
							
						
					
					
						commit
						92081e8360
					
				|  | @ -6,7 +6,7 @@ This document describes a getting started guide for **jenkins-operator** and an | ||||||
| 2. [Deploy Jenkins](#deploy-jenkins) | 2. [Deploy Jenkins](#deploy-jenkins) | ||||||
| 3. [Configure Seed Jobs and Pipelines](#configure-seed-jobs-and-pipelines) | 3. [Configure Seed Jobs and Pipelines](#configure-seed-jobs-and-pipelines) | ||||||
| 4. [Install Plugins](#install-plugins) | 4. [Install Plugins](#install-plugins) | ||||||
| 5. [Configure Backup & Restore](#configure-backup-&-restore) | 5. [Configure Backup & Restore](#configure-backup-and-restore) | ||||||
| 6. [Debugging](#debugging) | 6. [Debugging](#debugging) | ||||||
| 
 | 
 | ||||||
| ## First Steps | ## First Steps | ||||||
|  | @ -365,73 +365,80 @@ spec: | ||||||
| 
 | 
 | ||||||
| Then **jenkins-operator** will automatically install plugins after Jenkins master pod restart. | Then **jenkins-operator** will automatically install plugins after Jenkins master pod restart. | ||||||
| 
 | 
 | ||||||
| ### Via groovy script | ## Configure backup and restore | ||||||
| 
 | 
 | ||||||
| To install a plugin please add **2-install-slack-plugin.groovy** script to the **jenkins-operator-user-configuration-example** ConfigMap: | Backup and restore is done by container sidecar. | ||||||
| 
 | 
 | ||||||
| ``` | ### PVC | ||||||
|  | 
 | ||||||
|  | #### Create PVC | ||||||
|  | 
 | ||||||
|  | Save to file pvc.yaml: | ||||||
|  | ```yaml | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| data: | kind: PersistentVolumeClaim | ||||||
|   1-configure-theme.groovy: |2 | metadata: | ||||||
| 
 |   name: <pvc_name> | ||||||
|     import jenkins.* |   namespace: <namesapce> | ||||||
|     import jenkins.model.* | spec: | ||||||
|     import hudson.* |   accessModes: | ||||||
|     import hudson.model.* |   - ReadWriteOnce | ||||||
|     import org.jenkinsci.plugins.simpletheme.ThemeElement |   resources: | ||||||
|     import org.jenkinsci.plugins.simpletheme.CssTextThemeElement |     requests: | ||||||
|     import org.jenkinsci.plugins.simpletheme.CssUrlThemeElement |       storage: 500Gi | ||||||
| 
 |  | ||||||
|     Jenkins jenkins = Jenkins.getInstance() |  | ||||||
| 
 |  | ||||||
|     def decorator = Jenkins.instance.getDescriptorByType(org.codefirst.SimpleThemeDecorator.class) |  | ||||||
| 
 |  | ||||||
|     List<ThemeElement> configElements = new ArrayList<>(); |  | ||||||
|     configElements.add(new CssTextThemeElement("DEFAULT")); |  | ||||||
|     configElements.add(new CssUrlThemeElement("https://cdn.rawgit.com/afonsof/jenkins-material-theme/gh-pages/dist/material-light-green.css")); |  | ||||||
|     decorator.setElements(configElements); |  | ||||||
|     decorator.save(); |  | ||||||
| 
 |  | ||||||
|     jenkins.save() |  | ||||||
|   2-install-slack-plugin.groovy: |2 |  | ||||||
|    |  | ||||||
|     import jenkins.model.* |  | ||||||
|     import java.util.logging.Level |  | ||||||
|     import java.util.logging.Logger |  | ||||||
| 
 |  | ||||||
|     def instance = Jenkins.getInstance() |  | ||||||
|     def plugins = instance.getPluginManager() |  | ||||||
|     def updateCenter = instance.getUpdateCenter() |  | ||||||
|     def hasInstalledPlugins = false |  | ||||||
| 
 |  | ||||||
|     Logger logger = Logger.getLogger('jenkins.instance.restart') |  | ||||||
| 
 |  | ||||||
|     if (!plugins.getPlugin("slack")) { |  | ||||||
|         logger.log(Level.INFO, "Installing plugin: slack") |  | ||||||
| 
 |  | ||||||
|         updateCenter.updateAllSites() |  | ||||||
|         def plugin = updateCenter.getPlugin("slack") |  | ||||||
|         def installResult = plugin.deploy() |  | ||||||
|         while (!installResult.isDone()) sleep(10) |  | ||||||
|         hasInstalledPlugins = true  |  | ||||||
|         instance.save() |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (hasInstalledPlugins) { |  | ||||||
|         logger.log(Level.INFO, "Successfully installed slack plugin, restarting ...") |  | ||||||
|         // Queue a restart of the instance |  | ||||||
|         instance.save() |  | ||||||
|         instance.doSafeRestart(null) |  | ||||||
|     } else { |  | ||||||
|         logger.log(Level.INFO, "No plugins need installing.") |  | ||||||
|     } |  | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| Then **jenkins-operator** will automatically trigger **jenkins-operator-user-configuration** Jenkins Job again. | Run command: | ||||||
|  | ```bash | ||||||
|  | $ kubectl -n <namesapce> create -f pvc.yaml | ||||||
|  | ``` | ||||||
| 
 | 
 | ||||||
| ## Configure Backup & Restore | #### Configure Jenkins CR | ||||||
| 
 | 
 | ||||||
| Not implemented yet. | ```yaml | ||||||
|  | apiVersion: jenkins.io/v1alpha2 | ||||||
|  | kind: Jenkins | ||||||
|  | metadata: | ||||||
|  |   name: <cr_name> | ||||||
|  |   namespace: <namespace> | ||||||
|  | spec: | ||||||
|  |   backup: | ||||||
|  |     action: | ||||||
|  |       exec: | ||||||
|  |         command: | ||||||
|  |         - /home/user/bin/backup.sh # this command is invoked on "backup" container to make backup, for example /home/user/bin/backup.sh <backup_number>, <backup_number> is passed by operator | ||||||
|  |     containerName: backup # container name is responsible for backup | ||||||
|  |     interval: 30 # how often make backup in seconds | ||||||
|  |     makeBackupBeforePodDeletion: true # make backup before pod deletion | ||||||
|  |   master: | ||||||
|  |     containers: | ||||||
|  |     - name: jenkins-master | ||||||
|  |       image: jenkins/jenkins:lts | ||||||
|  |     - name: backup # container responsible for backup and restore | ||||||
|  |       env: | ||||||
|  |       - name: BACKUP_DIR | ||||||
|  |         value: /backup | ||||||
|  |       - name: JENKINS_HOME | ||||||
|  |         value: /jenkins-home | ||||||
|  |       image: virtuslab/jenkins-operator-backup-pvc:v0.0.2 # look at backup/pvc directory | ||||||
|  |       imagePullPolicy: IfNotPresent | ||||||
|  |       volumeMounts: | ||||||
|  |       - mountPath: /jenkins-home # Jenkins home volume | ||||||
|  |         name: jenkins-home | ||||||
|  |       - mountPath: /backup # backup volume | ||||||
|  |         name: backup | ||||||
|  |     volumes: | ||||||
|  |     - name: backup # PVC volume where backups will be stored | ||||||
|  |       persistentVolumeClaim: | ||||||
|  |         claimName: <pvc_name> | ||||||
|  |   restore: | ||||||
|  |     action: | ||||||
|  |       exec: | ||||||
|  |         command: | ||||||
|  |         - /home/user/bin/restore.sh # this command is invoked on "backup" container to make restore backup, for example /home/user/bin/restore.sh <backup_number>, <backup_number> is passed by operator | ||||||
|  |     containerName: backup # container name is responsible for restore backup | ||||||
|  |     #recoveryOnce: <backup_number> # if want to restore specific backup configure this field and then Jenkins will be restarted and desired backup will be restored | ||||||
|  | ``` | ||||||
| 
 | 
 | ||||||
| ## Debugging | ## Debugging | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue