mirror of
https://seed.radicle.dev/rad:zwTxygwuz5LDGBq255RA2CbNGrz8.git
synced 2026-10-18 19:30:29 +08:00
feat: Ansible role and playbook for setting up a CI node
This commit is contained in:
@@ -0,0 +1 @@
|
||||
install-ci
|
||||
@@ -0,0 +1,18 @@
|
||||
# This is a minimal example Ansible playbook to set up a Debian host as a
|
||||
# Radicle CI node. It uses the ansible/roles/radicle-ci-node role.
|
||||
#
|
||||
# The role installs a Radicle node, the CI broker, the Ambient CI engine,
|
||||
# and a basic configuration. This playbook additionally seeds a Radicle
|
||||
# repository to trigger a CI run.
|
||||
|
||||
- hosts: install-ci
|
||||
remote_user: debian
|
||||
become: yes
|
||||
roles:
|
||||
- role: radicle-ci-node
|
||||
tasks:
|
||||
- shell: |
|
||||
sudo -i -u ci rad seed rad:z28U8KUBvVSMQc13NydX3LBDsdEdQ
|
||||
|
||||
vars:
|
||||
ansible_python_interpreter: /usr/bin/python3
|
||||
@@ -0,0 +1,5 @@
|
||||
:80 {
|
||||
root * /srv/http/
|
||||
file_server browse
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
executor: /usr/bin/ambient-execute-plan
|
||||
projects: ~/ambient-projects.yaml
|
||||
artifacts_max_size: 1G
|
||||
cache_max_size: 50G
|
||||
uefi: true
|
||||
qemu:
|
||||
cpus: 1
|
||||
memory: 1G
|
||||
lint: false
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
description: |
|
||||
<p>This is a Radicle CI node.
|
||||
db: /home/ci/ci.db
|
||||
report_dir: /srv/http
|
||||
concurrent_adapters: 1
|
||||
adapters:
|
||||
ambient:
|
||||
command: /bin/radicle-ci-ambient
|
||||
env:
|
||||
RADICLE_CI_AMBIENT: /home/ci/radicle-ci-ambient.yaml
|
||||
triggers:
|
||||
- adapter: ambient
|
||||
filters:
|
||||
- !HasFile ".radicle/ambient.yaml"
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
image: /home/ci/ambient.qcow2
|
||||
logdir: /srv/http/ambient-log
|
||||
log: /home/ci/radicle-ci-ambient.log
|
||||
base_url: "http://{{ inventory_hostname }}/ambient-log"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
After=radicle-node.service
|
||||
Description=Radicle CI broker
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Environment=RAD_HOME=/home/ci/.radicle
|
||||
ExecStart=/bin/cib --log-level info --config /home/ci/ci.yaml process-events
|
||||
KillMode=control-group
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
User=ci
|
||||
Group=ci
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Radicle Node
|
||||
After=network-online.target
|
||||
Requires=network-online.target
|
||||
|
||||
[Service]
|
||||
User=ci
|
||||
Group=ci
|
||||
ExecStart=/usr/bin/radicle-node --listen 0.0.0.0:8776 --force
|
||||
Environment=RAD_HOME=/home/ci/.radicle RUST_BACKTRACE=1 RUST_LOG=debug
|
||||
KillMode=process
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,130 @@
|
||||
- name: "is radicle-archive-keyring package installed already?"
|
||||
shell: |
|
||||
dpkg -l radicle-archive-keyring | grep '^ii '
|
||||
register: radicle_archive_keyring
|
||||
ignore_errors: true
|
||||
|
||||
- name: "install tools to install radicle-archive-keyring package"
|
||||
when: radicle_archive_keyring.rc != 0
|
||||
apt:
|
||||
update_cache: true
|
||||
name:
|
||||
- curl
|
||||
- gpg
|
||||
state: present
|
||||
|
||||
- name: "download radicle-arcive-keying and install it"
|
||||
when: radicle_archive_keyring.rc != 0
|
||||
shell: |
|
||||
set -x
|
||||
tmp="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmp"' EXIT
|
||||
|
||||
cd "$tmp"
|
||||
curl -O -sL https://radicle.xyz/apt/radicle-archive-keyring.deb
|
||||
dpkg -i radicle-archive-keyring.deb
|
||||
|
||||
- name: "add Radicle APT repository to APT sources lists"
|
||||
apt_repository:
|
||||
repo: deb [signed-by=/usr/share/radicle/radicle-archive-keyring.asc] https://radicle.xyz/apt release main
|
||||
|
||||
- name: "install software for Radicle CI"
|
||||
apt:
|
||||
name:
|
||||
- radicle
|
||||
- radicle-ci-broker
|
||||
- radicle-ci-ambient
|
||||
- ambient-ci
|
||||
- caddy
|
||||
- xz-utils
|
||||
- psmisc
|
||||
|
||||
- name: "create user 'ci'"
|
||||
user:
|
||||
name: ci
|
||||
comment: Radicle CI
|
||||
shell: /bin/bash
|
||||
groups:
|
||||
- kvm
|
||||
|
||||
- name: "create ~ci/.config/ambient"
|
||||
file:
|
||||
state: directory
|
||||
path: /home/ci/.config/ambient
|
||||
owner: ci
|
||||
group: ci
|
||||
|
||||
- name: "configure Ambient"
|
||||
copy:
|
||||
src: ambient-config.yaml
|
||||
dest: /home/ci/.config/ambient/config.yaml
|
||||
|
||||
- name: "configure caddy"
|
||||
copy:
|
||||
src: Caddyfile
|
||||
dest: /etc/caddy/Caddyfile
|
||||
|
||||
- name: "create directory CI broker reports and Ambient run logs on the web"
|
||||
file:
|
||||
state: directory
|
||||
path: /srv/http
|
||||
owner: ci
|
||||
group: ci
|
||||
|
||||
- name: "configure CI broker"
|
||||
copy:
|
||||
src: ci.yaml
|
||||
dest: /home/ci/ci.yaml
|
||||
|
||||
- name: "configure Ambient adapter"
|
||||
copy:
|
||||
src: radicle-ci-ambient.yaml
|
||||
dest: /home/ci/radicle-ci-ambient.yaml
|
||||
|
||||
- name: "download a virtual machine image for Ambient"
|
||||
uri:
|
||||
url: https://files.liw.fi/ambient/ambient.qcow2.xz
|
||||
creates: /home/ci/ambient.qcow2.xz
|
||||
dest: /home/ci/ambient.qcow2.xz
|
||||
owner: ci
|
||||
group: ci
|
||||
|
||||
- name: "uncompress Ambient VM image, if there's a new one"
|
||||
shell: |
|
||||
x=/home/ci/ambient.qcow2
|
||||
if [ ! "$x" ] || [ "$x.xz" -nt "$x" ]; then
|
||||
unxz --keep --force "$x.xz"
|
||||
fi
|
||||
|
||||
- name: "set up Radicle node"
|
||||
shell: |
|
||||
sudo -i -u ci rad auth --alias "ci-{{ inventory_hostname }}" --stdin </dev/null
|
||||
|
||||
- name: "create systemd service for Radicle node"
|
||||
copy:
|
||||
src: radicle-node.service
|
||||
dest: /etc/systemd/system/radicle-node.service
|
||||
|
||||
- name: "create systemd service for CI broker"
|
||||
copy:
|
||||
src: radicle-ci-broker.service
|
||||
dest: /etc/systemd/system/radicle-ci-broker.service
|
||||
|
||||
- name: "reload systemd daemon"
|
||||
systemd:
|
||||
daemon_reload: true
|
||||
|
||||
- name: "restart Caddy"
|
||||
systemd:
|
||||
name: caddy
|
||||
state: restarted
|
||||
|
||||
- name: "restart Radicle node"
|
||||
systemd:
|
||||
name: radicle-node
|
||||
state: restarted
|
||||
|
||||
- name: "restart CI broker"
|
||||
systemd:
|
||||
name: radicle-ci-broker
|
||||
state: restarted
|
||||
Reference in New Issue
Block a user