Deploy Gitea and configure GitOps CI/CD pipeline
This commit is contained in:
parent
caa7316a2b
commit
be6ead2773
152
ansible/playbooks/09_gitea_setup.yml
Normal file
152
ansible/playbooks/09_gitea_setup.yml
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
---
|
||||||
|
- name: Deploy Gitea and Act Runner on Utility VM
|
||||||
|
hosts: utility.lab.local
|
||||||
|
gather_facts: true
|
||||||
|
become: false
|
||||||
|
|
||||||
|
vars:
|
||||||
|
gitea_container_dir: "/home/{{ admin_user }}/containers/gitea"
|
||||||
|
runner_dir: "/home/{{ admin_user }}/containers/act_runner"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Create Gitea persistent volume directories
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
loop:
|
||||||
|
- "{{ gitea_container_dir }}/data"
|
||||||
|
- "{{ gitea_container_dir }}/config"
|
||||||
|
|
||||||
|
- name: Deploy pre-seeded Gitea Configuration
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "./templates/app.ini.j2"
|
||||||
|
dest: "{{ gitea_container_dir }}/config/app.ini"
|
||||||
|
owner: 100999
|
||||||
|
group: 100999
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Enable systemd lingering for the administrator user
|
||||||
|
become: true
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "loginctl enable-linger {{ admin_user }}"
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Deploy Gitea Systemd Service
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "./templates/gitea.service.j2"
|
||||||
|
dest: "/etc/systemd/system/gitea.service"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Enable and start Gitea system service
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd_service:
|
||||||
|
name: gitea.service
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
daemon_reload: true
|
||||||
|
|
||||||
|
- name: Wait for Gitea to become responsive
|
||||||
|
ansible.builtin.wait_for:
|
||||||
|
port: 3000
|
||||||
|
delay: 2
|
||||||
|
timeout: 60
|
||||||
|
|
||||||
|
|
||||||
|
- name: Install build tool dependencies
|
||||||
|
become: true
|
||||||
|
ansible.builtin.package:
|
||||||
|
name:
|
||||||
|
- unzip
|
||||||
|
- git
|
||||||
|
- python3-pip
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install Ansible-Lint via pip
|
||||||
|
become: true
|
||||||
|
ansible.builtin.pip:
|
||||||
|
name: ansible-lint
|
||||||
|
state: present
|
||||||
|
extra_args: --break-system-packages
|
||||||
|
|
||||||
|
- name: Download and install Terraform CLI
|
||||||
|
become: true
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "https://releases.hashicorp.com/terraform/1.8.5/terraform_1.8.5_linux_amd64.zip"
|
||||||
|
dest: "/usr/local/bin"
|
||||||
|
remote_src: true
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Download and install TFLint
|
||||||
|
become: true
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "https://github.com/terraform-linters/tflint/releases/download/v0.50.1/tflint_linux_amd64.zip"
|
||||||
|
dest: "/usr/local/bin"
|
||||||
|
remote_src: true
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Create Gitea Runner directories
|
||||||
|
become: true
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ item.owner }}"
|
||||||
|
group: "{{ item.owner }}"
|
||||||
|
mode: "0755"
|
||||||
|
loop:
|
||||||
|
- { path: "{{ runner_dir }}", owner: "{{ admin_user }}" }
|
||||||
|
- { path: "/etc/act_runner", owner: "root" }
|
||||||
|
|
||||||
|
- name: Deploy Gitea Runner config file
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "./templates/act_runner_config.yaml.j2"
|
||||||
|
dest: "/etc/act_runner/config.yaml"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Download Gitea Runner binary
|
||||||
|
become: true
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: "https://dl.gitea.com/gitea-runner/2.1.0/gitea-runner-2.1.0-linux-amd64"
|
||||||
|
dest: "/usr/local/bin/gitea-runner"
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Generate Gitea runner registration token
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: "podman exec -w / -u git gitea gitea --config /etc/gitea/app.ini actions generate-runner-token"
|
||||||
|
register: gitea_runner_token_cmd
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Check if Gitea Runner is already registered
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ runner_dir }}/.runner"
|
||||||
|
register: runner_state_file
|
||||||
|
|
||||||
|
- name: Register Gitea Runner with Gitea
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: >
|
||||||
|
/usr/local/bin/gitea-runner register
|
||||||
|
--instance http://localhost:3000
|
||||||
|
--token {{ gitea_runner_token_cmd.stdout | trim }}
|
||||||
|
--name utility-runner
|
||||||
|
--labels "linux_amd64:host,self-hosted:host"
|
||||||
|
--no-interactive
|
||||||
|
chdir: "{{ runner_dir }}"
|
||||||
|
when: not runner_state_file.stat.exists
|
||||||
|
|
||||||
|
- name: Deploy Gitea Runner Systemd Service
|
||||||
|
become: true
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "./templates/act_runner.service.j2"
|
||||||
|
dest: "/etc/systemd/system/act_runner.service"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Enable and start Gitea Runner service
|
||||||
|
become: true
|
||||||
|
ansible.builtin.systemd_service:
|
||||||
|
name: act_runner.service
|
||||||
|
state: restarted
|
||||||
|
enabled: true
|
||||||
|
daemon_reload: true
|
||||||
16
ansible/playbooks/templates/act_runner.service.j2
Normal file
16
ansible/playbooks/templates/act_runner.service.j2
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea Act Runner
|
||||||
|
After=network-online.target gitea.service
|
||||||
|
Wants=gitea.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User={{ admin_user }}
|
||||||
|
Group={{ admin_user }}
|
||||||
|
WorkingDirectory=/home/{{ admin_user }}/containers/act_runner
|
||||||
|
ExecStart=/usr/local/bin/gitea-runner daemon --config /etc/act_runner/config.yaml
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
14
ansible/playbooks/templates/act_runner_config.yaml.j2
Normal file
14
ansible/playbooks/templates/act_runner_config.yaml.j2
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
log:
|
||||||
|
level: info
|
||||||
|
|
||||||
|
runner:
|
||||||
|
file: .runner
|
||||||
|
capacity: 2
|
||||||
|
envs: {}
|
||||||
|
timeout: 3h
|
||||||
|
|
||||||
|
container:
|
||||||
|
network: ""
|
||||||
|
|
||||||
|
host:
|
||||||
|
enable: true
|
||||||
25
ansible/playbooks/templates/app.ini.j2
Normal file
25
ansible/playbooks/templates/app.ini.j2
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
APP_NAME = Gitea: Git with a cup of tea
|
||||||
|
RUN_USER = git
|
||||||
|
RUN_MODE = prod
|
||||||
|
|
||||||
|
[database]
|
||||||
|
DB_TYPE = sqlite3
|
||||||
|
PATH = /var/lib/gitea/data/gitea.db
|
||||||
|
|
||||||
|
[repository]
|
||||||
|
ROOT = /var/lib/gitea/git/repositories
|
||||||
|
|
||||||
|
[server]
|
||||||
|
SSH_DOMAIN = 172.30.1.80
|
||||||
|
HTTP_PORT = 3000
|
||||||
|
ROOT_URL = http://172.30.1.80:3000/
|
||||||
|
DISABLE_SSH = false
|
||||||
|
SSH_PORT = 2222
|
||||||
|
LFS_START_SERVER = true
|
||||||
|
|
||||||
|
[security]
|
||||||
|
INSTALL_LOCK = true
|
||||||
|
SECRET_KEY = {{ gitea_secret_key | default('GiteaSecretKeyChangeMeDefault123') }}
|
||||||
|
|
||||||
|
[service]
|
||||||
|
DISABLE_REGISTRATION = false
|
||||||
27
ansible/playbooks/templates/gitea.service.j2
Normal file
27
ansible/playbooks/templates/gitea.service.j2
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Gitea Git Server
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User={{ admin_user }}
|
||||||
|
Group={{ admin_user }}
|
||||||
|
WorkingDirectory=/home/{{ admin_user }}/containers/gitea
|
||||||
|
ExecStartPre=-/usr/bin/podman rm -f gitea
|
||||||
|
ExecStart=/usr/bin/podman run --name gitea --rm \
|
||||||
|
-p 3000:3000 \
|
||||||
|
-p 2222:22 \
|
||||||
|
-v /home/{{ admin_user }}/containers/gitea/data:/var/lib/gitea:z,U \
|
||||||
|
-v /home/{{ admin_user }}/containers/gitea/config:/etc/gitea:z,U \
|
||||||
|
-e GITEA__security__INSTALL_LOCK=true \
|
||||||
|
-e GITEA__database__DB_TYPE=sqlite3 \
|
||||||
|
-e GITEA__database__PATH=/var/lib/gitea/data/gitea.db \
|
||||||
|
docker.io/gitea/gitea:1.22-rootless
|
||||||
|
ExecStop=/usr/bin/podman -t 10 gitea
|
||||||
|
ExecStopPost=-/usr/bin/podman rm -f gitea
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@ -26,3 +26,7 @@
|
|||||||
- name: Grafana/Prometheus Setup
|
- name: Grafana/Prometheus Setup
|
||||||
import_playbook: ./playbooks/07_observability.yml
|
import_playbook: ./playbooks/07_observability.yml
|
||||||
tags: observability
|
tags: observability
|
||||||
|
|
||||||
|
- name: Gitea & Act Runner Setup
|
||||||
|
import_playbook: ./playbooks/09_gitea_setup.yml
|
||||||
|
tags: gitea
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user