From 02f8873865ece1964f504e1c27577e0bebc51e06 Mon Sep 17 00:00:00 2001
From: Kristian Klausen <kristian@klausen.dk>
Date: Sat, 15 May 2021 00:50:40 +0200
Subject: [PATCH] gitlab_runner: Add service to cleanup docker artifacts
 produced by the runner

---
 .../files/gitlab-runner-docker-cleanup.service        |  7 +++++++
 .../files/gitlab-runner-docker-cleanup.timer          | 10 ++++++++++
 roles/gitlab_runner/handlers/main.yml                 |  3 +++
 roles/gitlab_runner/tasks/main.yml                    | 11 +++++++++++
 4 files changed, 31 insertions(+)
 create mode 100644 roles/gitlab_runner/files/gitlab-runner-docker-cleanup.service
 create mode 100644 roles/gitlab_runner/files/gitlab-runner-docker-cleanup.timer

diff --git a/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.service b/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.service
new file mode 100644
index 000000000..2c49032f6
--- /dev/null
+++ b/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Cleanup containers, images and volumes produced by GitLab Runner
+
+[Service]
+Type=oneshot
+ExecStart=docker system prune --force --filter label=com.gitlab.gitlab-runner.managed=true --volumes
+ExecStart=docker image prune --all --force --filter until=168h
diff --git a/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.timer b/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.timer
new file mode 100644
index 000000000..50378b252
--- /dev/null
+++ b/roles/gitlab_runner/files/gitlab-runner-docker-cleanup.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Run gitlab-runner-docker-cleanup.service daily
+
+[Timer]
+OnCalendar=weekly
+Persistent=true
+RandomizedDelaySec=1d
+
+[Install]
+WantedBy=timers.target
diff --git a/roles/gitlab_runner/handlers/main.yml b/roles/gitlab_runner/handlers/main.yml
index 2e33942c7..40375983e 100644
--- a/roles/gitlab_runner/handlers/main.yml
+++ b/roles/gitlab_runner/handlers/main.yml
@@ -4,5 +4,8 @@
 - name: restart gitlab-runner
   service: name=gitlab-runner state=restarted
 
+- name: restart gitlab-runner-docker-cleanup.timer
+  service: name=gitlab-runner-docker-cleanup.timer state=restarted daemon_reload=yes
+
 - name: restart docker
   service: name=docker state=restarted
diff --git a/roles/gitlab_runner/tasks/main.yml b/roles/gitlab_runner/tasks/main.yml
index 52dee9966..88d9cc094 100644
--- a/roles/gitlab_runner/tasks/main.yml
+++ b/roles/gitlab_runner/tasks/main.yml
@@ -64,5 +64,16 @@
     line: listen_address = ":{{ gitlab_runner_exporter_port }}"
   notify: restart gitlab-runner
 
+- name: install gitlab-runner-docker-cleanup.{service,timer}
+  copy: src={{ item }} dest=/etc/systemd/system/{{ item }} owner=root group=root mode=0644
+  loop:
+    - gitlab-runner-docker-cleanup.service
+    - gitlab-runner-docker-cleanup.timer
+  notify:
+    - restart gitlab-runner-docker-cleanup.timer
+
+- name: enable and start gitlab-runner-docker-cleanup.timer
+  systemd: name=gitlab-runner-docker-cleanup.timer state=started enabled=yes daemon_reload=yes
+
 - name: enable and start gitlab runner service
   systemd: name=gitlab-runner state=started enabled=yes daemon_reload=yes
-- 
GitLab