Sanitized mirror from private repository - 2026-04-18 11:19:59 UTC
This commit is contained in:
140
ansible/automation/playbooks/setup_gitea_runner.yml
Normal file
140
ansible/automation/playbooks/setup_gitea_runner.yml
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
# Setup Gitea Actions Runner
|
||||
# This playbook sets up a Gitea Actions runner to process workflow jobs
|
||||
# Run with: ansible-playbook -i hosts.ini playbooks/setup_gitea_runner.yml --limit homelab
|
||||
#
|
||||
# The Gitea API token is prompted at runtime and never stored in this file.
|
||||
# Retrieve the token from Vaultwarden (collection: Homelab > Gitea API Tokens).
|
||||
|
||||
- name: Setup Gitea Actions Runner
|
||||
hosts: homelab
|
||||
become: yes
|
||||
vars:
|
||||
gitea_url: "https://git.vish.gg"
|
||||
runner_name: "homelab-runner"
|
||||
runner_labels: "ubuntu-latest,linux,x64"
|
||||
runner_dir: "/opt/gitea-runner"
|
||||
|
||||
vars_prompt:
|
||||
- name: gitea_token
|
||||
prompt: "Enter Gitea API token (see Vaultwarden > Homelab > Gitea API Tokens)"
|
||||
private: yes
|
||||
|
||||
tasks:
|
||||
- name: Create runner directory
|
||||
file:
|
||||
path: "{{ runner_dir }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Check if act_runner binary exists
|
||||
stat:
|
||||
path: "{{ runner_dir }}/act_runner"
|
||||
register: runner_binary
|
||||
|
||||
- name: Download act_runner binary
|
||||
get_url:
|
||||
url: "https://dl.gitea.com/act_runner/0.2.6/act_runner-0.2.6-linux-amd64"
|
||||
dest: "{{ runner_dir }}/act_runner"
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
when: not runner_binary.stat.exists
|
||||
|
||||
- name: Get registration token from Gitea API
|
||||
uri:
|
||||
url: "{{ gitea_url }}/api/v1/repos/Vish/homelab-optimized/actions/runners/registration-token"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "token {{ gitea_token }}"
|
||||
return_content: yes
|
||||
register: registration_response
|
||||
delegate_to: localhost
|
||||
run_once: true
|
||||
|
||||
- name: Extract registration token
|
||||
set_fact:
|
||||
registration_token: "{{ registration_response.json.token }}"
|
||||
|
||||
- name: Check if runner is already registered
|
||||
stat:
|
||||
path: "{{ runner_dir }}/.runner"
|
||||
register: runner_config
|
||||
|
||||
- name: Register runner with Gitea
|
||||
shell: |
|
||||
cd {{ runner_dir }}
|
||||
echo "{{ gitea_url }}" | {{ runner_dir }}/act_runner register \
|
||||
--token {{ registration_token }} \
|
||||
--name {{ runner_name }} \
|
||||
--labels {{ runner_labels }} \
|
||||
--no-interactive
|
||||
when: not runner_config.stat.exists
|
||||
|
||||
- name: Create systemd service file
|
||||
copy:
|
||||
content: |
|
||||
[Unit]
|
||||
Description=Gitea Actions Runner
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory={{ runner_dir }}
|
||||
ExecStart={{ runner_dir }}/act_runner daemon
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
dest: /etc/systemd/system/gitea-runner.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
- name: Reload systemd daemon
|
||||
systemd:
|
||||
daemon_reload: yes
|
||||
|
||||
- name: Enable and start gitea-runner service
|
||||
systemd:
|
||||
name: gitea-runner
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Check runner status
|
||||
systemd:
|
||||
name: gitea-runner
|
||||
register: runner_status
|
||||
|
||||
- name: Display runner status
|
||||
debug:
|
||||
msg: |
|
||||
Gitea Actions Runner Status:
|
||||
- Service: {{ runner_status.status.ActiveState }}
|
||||
- Directory: {{ runner_dir }}
|
||||
- Name: {{ runner_name }}
|
||||
- Labels: {{ runner_labels }}
|
||||
- Gitea URL: {{ gitea_url }}
|
||||
|
||||
- name: Verify runner registration
|
||||
uri:
|
||||
url: "{{ gitea_url }}/api/v1/repos/Vish/homelab-optimized/actions/runners"
|
||||
method: GET
|
||||
headers:
|
||||
Authorization: "token {{ gitea_token }}"
|
||||
return_content: yes
|
||||
register: runners_list
|
||||
delegate_to: localhost
|
||||
run_once: true
|
||||
|
||||
- name: Display registered runners
|
||||
debug:
|
||||
msg: |
|
||||
Registered Runners: {{ runners_list.json.total_count }}
|
||||
{% for runner in runners_list.json.runners %}
|
||||
- {{ runner.name }} ({{ runner.status }})
|
||||
{% endfor %}
|
||||
Reference in New Issue
Block a user