summary refs log tree commit diff
path: root/nixos/modules/services/continuous-integration/jenkins/default.nix
diff options
context:
space:
mode:
authorMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2017-05-20 22:44:34 +0100
committerMateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>2017-05-20 22:54:07 +0100
commit41ea71a3475174daba0708dae2b365c2dd6f5d30 (patch)
tree3774681a882af03c72f3abf03d2a9da39229ab52 /nixos/modules/services/continuous-integration/jenkins/default.nix
parent8c0b08d1a43560121eedb19a6c5b157f1faadf96 (diff)
downloadnixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar.gz
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar.bz2
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar.lz
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar.xz
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.tar.zst
nixpkgs-41ea71a3475174daba0708dae2b365c2dd6f5d30.zip
jenkins service: add declarative plugin support
Diffstat (limited to 'nixos/modules/services/continuous-integration/jenkins/default.nix')
-rw-r--r--nixos/modules/services/continuous-integration/jenkins/default.nix37
1 files changed, 34 insertions, 3 deletions
diff --git a/nixos/modules/services/continuous-integration/jenkins/default.nix b/nixos/modules/services/continuous-integration/jenkins/default.nix
index 4edbbf59a42..a480937417d 100644
--- a/nixos/modules/services/continuous-integration/jenkins/default.nix
+++ b/nixos/modules/services/continuous-integration/jenkins/default.nix
@@ -101,6 +101,22 @@ in {
         '';
       };
 
+      plugins = mkOption {
+        default = null;
+        #type = types.nullOr (types.attrsOf types.package);
+        description = ''
+          A set of plugins to activate. Note that this will completely
+          remove and replace any previously installed plugins. If you
+          have manually-installed plugins that you want to keep while
+          using this module, set this option to
+          <literal>null</literal>. You can generate this set with a
+          tool such as <literal>jenkinsPlugins2nix</literal>.
+        '';
+        example = literalExample ''
+          import path/to/jenkinsPlugins2nix-generated-plugins.nix { inherit (pkgs) fetchurl stdenv; }
+        '';
+      };
+
       extraOptions = mkOption {
         type = types.listOf types.str;
         default = [ ];
@@ -149,9 +165,24 @@ in {
       path = cfg.packages;
 
       # Force .war (re)extraction, or else we might run stale Jenkins.
-      preStart = ''
-        rm -rf ${cfg.home}/war
-      '';
+
+      preStart =
+        let replacePlugins =
+              if isNull cfg.plugins
+              then ""
+              else
+                let pluginCmds = lib.attrsets.mapAttrsToList
+                      (n: v: "cp ${v} ${cfg.home}/plugins/${n}.hpi")
+                      cfg.plugins;
+                in ''
+                  rm -r ${cfg.home}/plugins
+                  mkdir -p ${cfg.home}/plugins
+                  ${lib.strings.concatStringsSep "\n" pluginCmds}
+                '';
+        in ''
+          rm -rf ${cfg.home}/war
+          ${replacePlugins}
+        '';
 
       script = ''
         ${pkgs.jdk}/bin/java -jar ${pkgs.jenkins}/webapps/jenkins.war --httpListenAddress=${cfg.listenAddress} \