Add jenkins continuous integration server and user.
By default the jenkins server is executed under the user "jenkins". Which can be configured using users.jenkins.* options. If a different user is requested by changing services.jenkins.user then none of the users.jenkins options apply. This patch does not include jenkins slave configuration. Some config options will probably change when this is implemented. Aspects like the user and environment are typically identical between slave and master. The service configs are different. The design is for users.jenkins to cover the shared aspects while services.jenkins and services.jenkins-slave cover the master and slave specific aspects, respectively. Another option would be to place everything under services.jenkins and have a config that selects master vs slave.
This commit is contained in:
parent
0f72effdd9
commit
9b79d5b298
|
@ -117,6 +117,7 @@
|
||||||
couchdb = 106;
|
couchdb = 106;
|
||||||
searx = 107;
|
searx = 107;
|
||||||
kippo = 108;
|
kippo = 108;
|
||||||
|
jenkins = 109;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid.
|
# When adding a uid, make sure it doesn't match an existing gid.
|
||||||
|
|
||||||
|
@ -212,6 +213,7 @@
|
||||||
couchdb = 106;
|
couchdb = 106;
|
||||||
searx = 107;
|
searx = 107;
|
||||||
kippo = 108;
|
kippo = 108;
|
||||||
|
jenkins = 109;
|
||||||
|
|
||||||
# When adding a gid, make sure it doesn't match an existing uid.
|
# When adding a gid, make sure it doesn't match an existing uid.
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,8 @@
|
||||||
./services/backup/rsnapshot.nix
|
./services/backup/rsnapshot.nix
|
||||||
./services/backup/sitecopy-backup.nix
|
./services/backup/sitecopy-backup.nix
|
||||||
./services/backup/tarsnap.nix
|
./services/backup/tarsnap.nix
|
||||||
|
./services/continuous-integration/jenkins/default.nix
|
||||||
|
./services/continuous-integration/jenkins/user.nix
|
||||||
./services/databases/4store-endpoint.nix
|
./services/databases/4store-endpoint.nix
|
||||||
./services/databases/4store.nix
|
./services/databases/4store.nix
|
||||||
./services/databases/couchdb.nix
|
./services/databases/couchdb.nix
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
with pkgs.lib;
|
||||||
|
let
|
||||||
|
cfg = config.services.jenkins;
|
||||||
|
userCfg = config.users.jenkins;
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
services.jenkins = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the jenkins continuous integration server.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
default = "jenkins";
|
||||||
|
type = with types; string;
|
||||||
|
description = ''
|
||||||
|
User the jenkins server should execute under. Defaults to the "jenkins" user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
home = mkOption {
|
||||||
|
default = userCfg.home;
|
||||||
|
type = with types; string;
|
||||||
|
description = ''
|
||||||
|
The path to use as JENKINS_HOME. Defaults to the home of the "jenkins" user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
default = 8080;
|
||||||
|
type = types.uniq types.int;
|
||||||
|
description = ''
|
||||||
|
Specifies port number on which the jenkins HTTP interface listens. The default is 8080
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
packages = mkOption {
|
||||||
|
default = [ pkgs.stdenv pkgs.git pkgs.jdk pkgs.openssh pkgs.nix ];
|
||||||
|
type = types.listOf types.package;
|
||||||
|
description = ''
|
||||||
|
Packages to add to PATH for the jenkins process.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = mkOption {
|
||||||
|
default = { NIX_REMOTE = "daemon"; };
|
||||||
|
type = with types; attrsOf string;
|
||||||
|
description = ''
|
||||||
|
Additional environment variables to be passed to the jenkins process.
|
||||||
|
The environment will always include JENKINS_HOME.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.jenkins.enable = true;
|
||||||
|
|
||||||
|
systemd.services.jenkins = {
|
||||||
|
description = "jenkins continuous integration server";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
JENKINS_HOME = cfg.home;
|
||||||
|
} // cfg.environment;
|
||||||
|
|
||||||
|
path = cfg.packages;
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
${pkgs.jdk}/bin/java -jar ${pkgs.jenkins} --httpPort=${toString cfg.port}
|
||||||
|
'';
|
||||||
|
|
||||||
|
postStart = ''
|
||||||
|
until ${pkgs.curl}/bin/curl -L localhost:${toString cfg.port} ; do
|
||||||
|
sleep 10
|
||||||
|
done
|
||||||
|
while true ; do
|
||||||
|
index=`${pkgs.curl}/bin/curl -L localhost:${toString cfg.port}`
|
||||||
|
if [[ !("$index" =~ 'Please wait while Jenkins is restarting' ||
|
||||||
|
"$index" =~ 'Please wait while Jenkins is getting ready to work') ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
User = cfg.user;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
with pkgs.lib;
|
||||||
|
let
|
||||||
|
cfg = config.users.jenkins;
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
users.jenkins = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable the jenkins user. By default enabling a jenkins service enables the
|
||||||
|
jenkins user. The "user" config property of the service can be used to select a different
|
||||||
|
user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraGroups = mkOption {
|
||||||
|
default = [];
|
||||||
|
type = with types; listOf string;
|
||||||
|
description = ''
|
||||||
|
Extra groups of the "jenkins" user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
group = mkOption {
|
||||||
|
default = "jenkins";
|
||||||
|
description = ''
|
||||||
|
Default group of "jenkins" user.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
home = mkOption {
|
||||||
|
default = "/var/lib/jenkins";
|
||||||
|
type = types.string;
|
||||||
|
description = ''
|
||||||
|
Home of the "jenkins" user and JENKINS_HOME.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
users.extraGroups = optional (cfg.group == "jenkins") {
|
||||||
|
name = "jenkins";
|
||||||
|
gid = config.ids.gids.jenkins;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraUsers = {
|
||||||
|
jenkins = {
|
||||||
|
description = "jenkins user";
|
||||||
|
createHome = true;
|
||||||
|
home = cfg.home;
|
||||||
|
group = cfg.group;
|
||||||
|
extraGroups = cfg.extraGroups;
|
||||||
|
useDefaultShell = true;
|
||||||
|
uid = config.ids.uids.jenkins;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ with import ../lib/testing.nix { inherit system minimal; };
|
||||||
efi-installer = makeTests (import ./efi-installer.nix);
|
efi-installer = makeTests (import ./efi-installer.nix);
|
||||||
gnome3 = makeTest (import ./gnome3.nix);
|
gnome3 = makeTest (import ./gnome3.nix);
|
||||||
ipv6 = makeTest (import ./ipv6.nix);
|
ipv6 = makeTest (import ./ipv6.nix);
|
||||||
|
jenkins = makeTest (import ./jenkins.nix);
|
||||||
kde4 = makeTest (import ./kde4.nix);
|
kde4 = makeTest (import ./kde4.nix);
|
||||||
#kexec = makeTest (import ./kexec.nix);
|
#kexec = makeTest (import ./kexec.nix);
|
||||||
login = makeTest (import ./login.nix {});
|
login = makeTest (import ./login.nix {});
|
||||||
|
|
14
nixos/tests/jenkins.nix
Normal file
14
nixos/tests/jenkins.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
nodes = {
|
||||||
|
master = { pkgs, config, ... }: {
|
||||||
|
services.jenkins.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
startAll;
|
||||||
|
|
||||||
|
$master->waitForUnit("jenkins");
|
||||||
|
'';
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ stdenv, fetchurl }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "jenkins";
|
||||||
|
version = "1.550";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://mirrors.jenkins-ci.org/war/${version}/jenkins.war";
|
||||||
|
sha256 = "1ziimbfs9kylga0xmxlfsfcc7qsirs5bnx00pa99m2l5sz2ki793";
|
||||||
|
};
|
||||||
|
meta = {
|
||||||
|
description = "An extendable open source continuous integration server.";
|
||||||
|
homepage = http://jenkins-ci.org;
|
||||||
|
maintainers = [ stdenv.lib.maintainers.coconnor ];
|
||||||
|
};
|
||||||
|
|
||||||
|
buildCommand = "ln -s $src $out";
|
||||||
|
}
|
|
@ -3686,6 +3686,8 @@ let
|
||||||
|
|
||||||
jikespg = callPackage ../development/tools/parsing/jikespg { };
|
jikespg = callPackage ../development/tools/parsing/jikespg { };
|
||||||
|
|
||||||
|
jenkins = callPackage ../development/tools/continuous-integration/jenkins { };
|
||||||
|
|
||||||
lcov = callPackage ../development/tools/analysis/lcov { };
|
lcov = callPackage ../development/tools/analysis/lcov { };
|
||||||
|
|
||||||
leiningen = callPackage ../development/tools/build-managers/leiningen { };
|
leiningen = callPackage ../development/tools/build-managers/leiningen { };
|
||||||
|
|
Loading…
Reference in a new issue