ci: add gitea + runner
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
---
|
||||
# Installs + registers + services a single runner instance.
|
||||
# Installs + registers + services a single act_runner instance.
|
||||
# Inputs: project_spec (dict), idx (int), project_token (str).
|
||||
- name: Set per-runner facts
|
||||
ansible.builtin.set_fact:
|
||||
runner_name: "{{ inventory_hostname }}-{{ project_spec.project }}-{{ runner_env }}-{{ idx }}"
|
||||
runner_dir: "{{ runner_home }}/actions-runner-{{ project_spec.project }}-{{ idx }}"
|
||||
runner_dir: "{{ runner_home }}/act-runner-{{ project_spec.project }}-{{ idx }}"
|
||||
svc_name: "gitea-runner-{{ project_spec.project }}-{{ idx }}"
|
||||
|
||||
- name: "Create runner dir {{ runner_dir }}"
|
||||
ansible.builtin.file:
|
||||
@@ -14,54 +15,54 @@
|
||||
group: "{{ runner_user }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Download runner tarball (sha256 verified)
|
||||
- name: Download act_runner binary (sha256 verified)
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ runner_download_url }}"
|
||||
dest: "{{ runner_dir }}/{{ runner_tarball }}"
|
||||
checksum: "sha256:{{ runner_sha256 }}"
|
||||
url: "{{ act_runner_download_url }}"
|
||||
dest: "{{ runner_dir }}/gitea-runner"
|
||||
checksum: "sha256:{{ act_runner_sha256 }}"
|
||||
owner: "{{ runner_user }}"
|
||||
group: "{{ runner_user }}"
|
||||
mode: "0644"
|
||||
|
||||
- name: Extract runner
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ runner_dir }}/{{ runner_tarball }}"
|
||||
dest: "{{ runner_dir }}"
|
||||
remote_src: true
|
||||
owner: "{{ runner_user }}"
|
||||
group: "{{ runner_user }}"
|
||||
creates: "{{ runner_dir }}/config.sh"
|
||||
mode: "0755"
|
||||
|
||||
- name: "Register runner {{ runner_name }}"
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
./config.sh --unattended
|
||||
--url {{ project_spec.url }}
|
||||
./gitea-runner register
|
||||
--no-interactive
|
||||
--instance {{ gitea_instance }}
|
||||
--token {{ project_token }}
|
||||
--name {{ runner_name }}
|
||||
--labels {{ project_spec.label }}
|
||||
--work _work
|
||||
--replace
|
||||
--labels {{ project_spec.labels }}
|
||||
chdir: "{{ runner_dir }}"
|
||||
creates: "{{ runner_dir }}/.runner"
|
||||
become_user: "{{ runner_user }}"
|
||||
|
||||
- name: "Check if service installed for {{ runner_name }}"
|
||||
ansible.builtin.find:
|
||||
paths: "{{ runner_dir }}"
|
||||
patterns: ".service"
|
||||
hidden: true
|
||||
register: runner_svc_marker
|
||||
- name: "Write systemd unit for {{ svc_name }}"
|
||||
ansible.builtin.copy:
|
||||
dest: "/etc/systemd/system/{{ svc_name }}.service"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Gitea Actions Runner ({{ runner_name }})
|
||||
After=network.target
|
||||
|
||||
- name: "Install systemd service for {{ runner_name }}"
|
||||
ansible.builtin.command:
|
||||
cmd: "./svc.sh install {{ runner_user }}"
|
||||
chdir: "{{ runner_dir }}"
|
||||
when: runner_svc_marker.matched == 0
|
||||
[Service]
|
||||
Type=simple
|
||||
User={{ runner_user }}
|
||||
WorkingDirectory={{ runner_dir }}
|
||||
ExecStart={{ runner_dir }}/gitea-runner daemon
|
||||
Restart=always
|
||||
RestartSec=5s
|
||||
Environment=HOME={{ runner_home }}
|
||||
|
||||
- name: "Start + enable service for {{ runner_name }}"
|
||||
ansible.builtin.command:
|
||||
cmd: "./svc.sh start"
|
||||
chdir: "{{ runner_dir }}"
|
||||
register: svc_start
|
||||
changed_when: "'active (running)' not in svc_start.stdout"
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
- name: "Enable + start {{ svc_name }}"
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ svc_name }}"
|
||||
enabled: true
|
||||
state: started
|
||||
daemon_reload: true
|
||||
|
||||
@@ -4,13 +4,12 @@
|
||||
ansible.builtin.set_fact:
|
||||
project_token: "{{ lookup('ansible.builtin.env', project_spec.token_env) }}"
|
||||
|
||||
- name: "Fail if token missing for {{ project_spec.project }}"
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- project_token | length > 0
|
||||
fail_msg: >-
|
||||
Env var {{ project_spec.token_env }} is empty/unset.
|
||||
Export a fresh registration token (Settings > Actions > Runners) before running.
|
||||
- name: "Warn and skip {{ project_spec.project }} — token missing"
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
Skipping {{ project_spec.project }}: env var {{ project_spec.token_env }} is empty/unset.
|
||||
Export a fresh registration token (Gitea repo → Settings → Actions → Runners → Create new runner token).
|
||||
when: project_token | length == 0
|
||||
|
||||
- name: "Install {{ project_spec.count }} runner(s) for {{ project_spec.project }}"
|
||||
ansible.builtin.include_tasks: install_one_runner.yml
|
||||
@@ -18,3 +17,4 @@
|
||||
loop_control:
|
||||
loop_var: idx
|
||||
label: "{{ project_spec.project }}-{{ idx }}"
|
||||
when: project_token | length > 0
|
||||
|
||||
Reference in New Issue
Block a user