CI running

This commit is contained in:
Greg Hellings
2023-12-27 20:27:38 -06:00
parent 09628a3d42
commit 7dde6d256a
9 changed files with 151 additions and 57 deletions
+32 -21
View File
@@ -38,32 +38,11 @@ in {
proxy_set_header X-Forwarded-Ssl on;
'';
};
services.nginx.virtualHosts."gitlab.shire-zebra.ts.net" = {
listen = [ {
addr = vpnIp;
port = registryPort;
ssl = true;
} ];
locations."/" = {
proxyPass = "http://127.0.0.1:5000/";
recommendedProxySettings = true;
};
extraConfig = builtins.concatStringsSep "\n" [
"ssl_certificate /etc/certs/gitlab.shire-zebra.ts.net.crt ;"
"ssl_certificate_key /etc/certs/gitlab.shire-zebra.ts.net.key ;"
];
};
services.cron = {
enable = true;
systemCronJobs = [ "0 0 1 */2 * cd /etc/certs && tailscale cert gitlab.shire-zebra.ts.net && chown nginx * && systemctl reload nginx" ];
};
greg.tailscale.enable = true;
virtualisation.docker.enable = true;
services = {
resolved.enable = true;
openssh.enable = true;
gitlab = {
enable = true;
backup = {
@@ -105,6 +84,29 @@ in {
};
};
nginx.virtualHosts."gitlab.shire-zebra.ts.net" = {
listen = [ {
addr = vpnIp;
port = registryPort;
ssl = true;
} ];
locations."/" = {
proxyPass = "http://127.0.0.1:5000/";
recommendedProxySettings = true;
};
extraConfig = builtins.concatStringsSep "\n" [
"ssl_certificate /etc/certs/gitlab.shire-zebra.ts.net.crt ;"
"ssl_certificate_key /etc/certs/gitlab.shire-zebra.ts.net.key ;"
"client_max_body_size 250m;"
];
};
# Fetch the SSL certificates for nginx to use
cron = {
enable = true;
systemCronJobs = [ "0 0 1 */2 * cd /etc/certs && tailscale cert gitlab.shire-zebra.ts.net && chown nginx * && systemctl reload nginx" ];
};
postgresql = {
enable = true;
checkConfig = true;
@@ -124,6 +126,15 @@ in {
redis.servers.gitlab = {
enable = true;
};
resolved.enable = true;
openssh.enable = true;
};
# Do not start nginx until we have tailscaled up and running, so it can bind
# to the 100.* addresses
systemd.services.nginx = {
after = [ "tailscaled.service" ];
requires = [ "tailscaled.service" ];
};
system.stateVersion = "24.05";
}
+17 -3
View File
@@ -22,7 +22,7 @@ in {
age.identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
age.secrets.qemu-runner-reg-1 = {
file = ../../secrets/gitlab/myself-qemu-runner-reg-1.age;
owner = "gitlab-runner";
owner = "root";
};
networking.useHostResolvConf = pkgs.lib.mkForce false;
@@ -40,9 +40,23 @@ in {
tagList = [ "shell" "qemu" ];
};
};
virtualisation.libvirtd = {
enable = true;
onBoot = "ignore";
};
systemd.services.gitlab-runner.wants = [ "network-online.target" "systemd-resolved.service" ];
systemd.services.gitlab-runner.after = [ "network.target" "network-online.target" "systemd-resolved.service" ];
systemd.services = {
gitlab-runner = {
wants = [ "network-online.target" "systemd-resolved.service" ];
after = [ "network.target" "network-online.target" "systemd-resolved.service" ];
};
libvirtd.serviceConfig = {
DevicePolicy = "auto";
DeviceAllow = [ "/dev/kvm" "/dev/mem" ];
PrivateDevices = false;
ProtectKernelModules = false;
};
};
system.stateVersion = "24.05";
}
+12 -4
View File
@@ -1,4 +1,4 @@
{ inputs, name, extra ? {} }:
{ inputs, name, extra ? {}, packages ? [] }:
({ config, pkgs, lib, ... }:
let
@@ -32,10 +32,11 @@ lib.attrsets.recursiveUpdate {
py
shellcheck
unzip
xonsh
xorriso
vagrant
wget
];
] ++ packages;
networking = {
useHostResolvConf = pkgs.lib.mkForce false;
@@ -61,8 +62,15 @@ lib.attrsets.recursiveUpdate {
};
systemd.services.gitlab-runner = {
wants = [ "network-online.target" "systemd-resolved.service" ];
after = [ "network.target" "network-online.target" "systemd-resolved.service" ];
wants = [
"network-online.target"
"systemd-resolved.service"
];
after = [
"network.target"
"network-online.target"
"systemd-resolved.service"
];
};
system.stateVersion = "24.05";
+40 -7
View File
@@ -59,8 +59,11 @@ in {
];
serviceConfig = {
DevicePolicy = lib.mkForce "auto";
ExecPostStop = [ "rmmod kvm_amd kvm" ];
ExecPreStart = [ "modprobe kvm kvm_amd" ];
ExecStopPost = [ "${pkgs.kmod}/bin/rmmod kvm_amd kvm" ];
ExecStartPre = [
"${pkgs.kmod}/bin/modprobe kvm"
"${pkgs.kmod}/bin/modprobe kvm_amd"
];
};
};
"container@gitlab-runner-vbox" = {
@@ -69,8 +72,12 @@ in {
];
serviceConfig = {
DevicePolicy = lib.mkForce "auto";
ExecPostStop = [ "rmmod vboxnetadp vboxnetflt vboxdrv" ];
ExecPreStart = [ "modprobe vboxdrv vboxnetadp vboxnetflt" ];
ExecStopPost = [ "${pkgs.kmod}/bin/rmmod vboxnetadp vboxnetflt vboxdrv" ];
ExecStartPre = [
"${pkgs.kmod}/bin/modprobe vboxdrv"
"${pkgs.kmod}/bin/modprobe vboxnetadp"
"${pkgs.kmod}/bin/modprobe vboxnetflt"
];
};
};
"container@gitlab".serviceConfig = {
@@ -78,6 +85,7 @@ in {
ProtectKernelModules = false;
PrivateDevices = false;
};
gitlab-runner.serviceConfig.EnvironmentFile = config.age.secrets.docker-auth.path;
};
#####################################################################################
@@ -89,13 +97,28 @@ in {
hostPath = "/dev/kvm";
isReadOnly = false;
};
"/dev/mem" = {
hostPath = "/dev/mem";
isReadOnly = false;
};
};
extraFlags = [
"--property=DeviceAllow=/dev/kvm"
];
hostAddress = "192.168.201.1";
localAddress = "192.168.201.2";
config = ((import ./container-runner-qemu.nix) inputs);
config = ((import ./container-runner-vbox.nix) {
inherit inputs;
name = "qemu";
packages = with pkgs; [ qemu_full qemu_kvm ];
extra = {
virtualisation.libvirtd = {
enable = true;
onBoot = "ignore";
package = pkgs.libvirt-greg;
};
};
});
};
#####################################################################################
@@ -132,6 +155,7 @@ in {
enableHardening = false;
headless = true;
};
networking.firewall.allowedTCPPorts = [ 18083 ]; # Should be interface for vboxweb
};
});
};
@@ -153,14 +177,17 @@ in {
#################### Local Podman/Docker Runner #####################################
#####################################################################################
age.secrets.runner-reg.file = ../../secrets/gitlab/myself-podman-runner-reg.age;
age.secrets.docker-auth.file = ../../secrets/gitlab/docker-auth.age;
services.gitlab-runner = {
enable = true;
settings.concurrent = 5;
settings = {
concurrent = 5;
};
services = {
default = {
executor = "docker";
registrationConfigFile = config.age.secrets.runner-reg.path;
dockerImage = "fedora:39";
dockerImage = "registry.thehellings.com/greg/ci-images/fedora";
dockerAllowedImages = [
"alpine:*"
"debian:*"
@@ -173,11 +200,17 @@ in {
"koalaman/shellcheck:*"
"registry.gitlab.com/gitlab-org/*"
"registry.thehellings.com/*"
];
dockerAllowedServices = [
"docker:*"
"registry.thehellings.com/*"
];
dockerPrivileged = true;
dockerVolumes = [
"/certs/client"
"/cache"
];
};
};
};