From ef265b87de2e929886928f94862ad91effca9fdb Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 28 Jul 2022 17:34:49 +0200 Subject: [PATCH] Update doc --- app/drone-ci/integration/README.md | 17 ++++++----- app/drone-ci/integration/docker-compose.yml | 31 +++++++++++++++++++-- app/drone-ci/integration/nix.conf | 9 ++++++ 3 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 app/drone-ci/integration/nix.conf diff --git a/app/drone-ci/integration/README.md b/app/drone-ci/integration/README.md index 6c7f756..ddd8530 100644 --- a/app/drone-ci/integration/README.md +++ b/app/drone-ci/integration/README.md @@ -26,17 +26,18 @@ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compo chmod +x /usr/local/bin/docker-compose ``` -## Prepare the runner +## Install the runner -*The folder does not need to be prepared anymore* +*This is our Nix runner version 2, previously we had another way to start Nix runners. This one has a proper way to handle concurrency, require less boilerplate, and should be safer and more idiomatic.* -## Launch the runner - -Because we use a shared nix folder, we set the number of concurrent builds to 1. -For more details and customizations, see `docker-compose.yml`. ```bash -DRONE_NAME=lheureduthe DRONE_OWNER=quentin DRONE_SECRET=xxx docker-compose up -d +wget https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/raw/branch/main/app/drone-ci/integration/nix.conf +wget https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/raw/branch/main/app/drone-ci/integration/docker-compose.yml + +# Edit the docker-compose.yml to adapt its variables to your needs, +# especially the capacitiy value and its name. +COMPOSE_PROJECT_NAME=drone DRONE_SECRET=xxx docker-compose up -d ``` That's all folks. @@ -59,6 +60,8 @@ It will give you the following result: ## Random note +*This part might be deprecated!* + This setup is done mainly to allow nix builds with some cache. To use the cache in Drone, you must set your repository as trusted. The command line tool does not work (it says it successfully set your repository as trusted but it did nothing): diff --git a/app/drone-ci/integration/docker-compose.yml b/app/drone-ci/integration/docker-compose.yml index 2644918..57fdd09 100644 --- a/app/drone-ci/integration/docker-compose.yml +++ b/app/drone-ci/integration/docker-compose.yml @@ -1,5 +1,14 @@ version: '3.4' services: + nix-daemon: + image: nixpkgs/nix:nixos-22.05 + restart: always + command: nix-daemon + privileged: true + volumes: + - "nix:/nix" + - "./nix.conf:/etc/nix/nix.conf:ro" + drone-runner: image: drone/drone-runner-docker:latest restart: always @@ -7,18 +16,32 @@ services: - DRONE_RPC_PROTO=https - DRONE_RPC_HOST=drone.deuxfleurs.fr - DRONE_RPC_SECRET=${DRONE_SECRET} - - DRONE_RUNNER_CAPACITY=1 + - DRONE_RUNNER_CAPACITY=3 - DRONE_DEBUG=true - DRONE_LOGS_TRACE=true - DRONE_RPC_DUMP_HTTP=true - DRONE_RPC_DUMP_HTTP_BODY=true - - DRONE_RUNNER_NAME=${DRONE_NAME} + - DRONE_RUNNER_NAME=i_forgot_to_change_my_runner_name + - DRONE_RUNNER_LABELS=nix-daemon:1 + # we should put "nix:/nix:ro but it is not supported by + # drone-runner-docker because the dependency envconfig does + # not support having two colons (:) in the same stanza. + # Without the RO flag (or using docker userns), build isolation + # is broken. + # https://discourse.drone.io/t/allow-mounting-a-host-volume-as-read-only/10071 + # https://github.com/kelseyhightower/envconfig/pull/153 + # + # A workaround for isolation is to configure docker with a userns, + # so even if the folder is writable to root, it is not to any non + # privileged docker daemon ran by drone! + - DRONE_RUNNER_VOLUMES=drone_nix:/nix + - DRONE_RUNNER_ENVIRON=NIX_REMOTE:daemon ports: - "3000:3000/tcp" volumes: - "/var/run/docker.sock:/var/run/docker.sock" - drone-gc: + drone-gc: image: drone/gc:latest restart: always environment: @@ -27,3 +50,5 @@ services: - GC_INTERVAL=10m volumes: - "/var/run/docker.sock:/var/run/docker.sock" +volumes: + nix: diff --git a/app/drone-ci/integration/nix.conf b/app/drone-ci/integration/nix.conf new file mode 100644 index 0000000..debea69 --- /dev/null +++ b/app/drone-ci/integration/nix.conf @@ -0,0 +1,9 @@ +substituters = https://cache.nixos.org https://nix.web.deuxfleurs.fr +trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs= +max-jobs = auto +cores = 0 +log-lines = 200 +filter-syscalls = true +sandbox = true +keep-outputs = true +keep-derivations = true