Add Gitea and Woodpecker CI support
This commit is contained in:
parent
a41f613258
commit
b8bb9b58fb
6 changed files with 372 additions and 1 deletions
|
@ -3,19 +3,20 @@
|
|||
| Name | Description | Documentation |
|
||||
| ------------------------------ | ------------------------------------- | ------------- |
|
||||
| [Docker](https://www.docker.com/) | Open-source software for deploying containerized applications | [Link](docker.md) |
|
||||
| [Gitea](https://gitea.io/) | A painless self-hosted Git service. | [Link](gitea.md) |
|
||||
| [Miniflux](https://miniflux.app/) | Minimalist and opinionated feed reader. | [Link](miniflux.md) |
|
||||
| [PostgreSQL](https://www.postgresql.org) | A powerful, open source object-relational database system | [Link](postgres.md) |
|
||||
| [Radicale](https://miniflux.app/) | A Free and Open-Source CalDAV and CardDAV Server (solution for hosting contacts and calendars) | [Link](radicale.md) |
|
||||
| [Traefik](https://doc.traefik.io/traefik/) | A container-aware reverse-proxy server | [Link](traefik.md) |
|
||||
| [Vaultwarden](https://github.com/dani-garcia/vaultwarden) | A lightweight unofficial and compatible implementation of the [Bitwarden](https://bitwarden.com/) password manager | [Link](vaultwarden.md) |
|
||||
| [Uptime-kuma](https://uptime.kuma.pet/) | A fancy self-hosted monitoring tool | [Link](uptime-kuma.md) |
|
||||
| [Woodpecker CI](https://woodpecker-ci.org/) | A simple Continuous Integration (CI) engine with great extensibility. | [Link](woodpecker-ci.md) |
|
||||
|
||||
|
||||
## Coming soon
|
||||
|
||||
| Name | Description |
|
||||
| ------------------------------ | ------------------------------------- |
|
||||
| [Gitea](https://gitea.io/), by absorbing [gitea-docker-ansible-deploy](https://github.com/spantaleev/gitea-docker-ansible-deploy) | git version-control server |
|
||||
| [Nextcloud](https://nextcloud.com/), by absorbing [nextcloud-docker-ansible-deploy](https://github.com/spantaleev/nextcloud-docker-ansible-deploy) | Groupware server (Files, Contacts, Calendaring, etc.) |
|
||||
| [PeerTube](https://joinpeertube.org/), by absorbing [peertube-docker-ansible-deploy](https://github.com/spantaleev/peertube-docker-ansible-deploy) | A video-platform server |
|
||||
| [Garage](https://garagehq.deuxfleurs.fr/), by absorbing [garage-docker-ansible-deploy](https://github.com/moan0s/garage-docker-ansible-deploy) | Open-source distributed object storage service tailored for self-hosting |
|
||||
|
|
59
docs/services/gitea.md
Normal file
59
docs/services/gitea.md
Normal file
|
@ -0,0 +1,59 @@
|
|||
# Gitea
|
||||
|
||||
[Gitea](https://gitea.io/) is a painless self-hosted Git service.
|
||||
|
||||
|
||||
## Dependencies
|
||||
|
||||
This service requires the following other services:
|
||||
|
||||
- a [Postgres](postgres.md) database
|
||||
- a [Traefik](traefik.md) reverse-proxy server
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
To enable this service, add the following configuration to your `vars.yml` file and re-run the [installation](../installing.md) process:
|
||||
|
||||
```yaml
|
||||
########################################################################
|
||||
# #
|
||||
# gitea #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
gitea_enabled: true
|
||||
|
||||
# Gitea uses port 22 by default.
|
||||
# We recommend that you move your regular SSH server to another port,
|
||||
# and stick to this default.
|
||||
#
|
||||
# If you wish to use another port, uncomment the variable below
|
||||
# and adjust the port as you see fit.
|
||||
# gitea_ssh_port: 222
|
||||
|
||||
gitea_hostname: mash.example.com
|
||||
gitea_path_prefix: /gitea
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /gitea #
|
||||
# #
|
||||
########################################################################
|
||||
```
|
||||
|
||||
In the example configuration above, we configure the service to be hosted at `https://mash.example.com/gitea`.
|
||||
|
||||
You can remove the `gitea_path_prefix` variable definition, to make it default to `/`, so that the service is served at `https://mash.example.com/`.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
After installation, you should be able to access your new Gitea instance at the configured URL (see above).
|
||||
|
||||
Going there, you'll be taken to the initial setup wizard, which will let you assign some paswords and other configuration.
|
||||
|
||||
|
||||
## Recommended other services
|
||||
|
||||
You may also wish to look into [Woodpecker CI](woodpecker-ci.md), which can integrate nicely with Gitea.
|
139
docs/services/woodpecker-ci.md
Normal file
139
docs/services/woodpecker-ci.md
Normal file
|
@ -0,0 +1,139 @@
|
|||
# Woodpecker CI
|
||||
|
||||
This playbook can install and configure [Woodpecker CI](https://woodpecker-ci.org/) for you.
|
||||
|
||||
Woodpecker CI is a [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration) engine which can build and deploy your code automatically after pushing to a Gitea repository.
|
||||
|
||||
A Woodpecker CI installation contains 2 components:
|
||||
|
||||
- one [Woodpecker CI **server**](#woodpecker-ci-server) (web interface, central management node)
|
||||
- one or more [Woodpecker CI **agent**](#woodpecker-ci-agent) instances (which run your CI jobs)
|
||||
|
||||
It's better to run the **agent** instances elsewhere (not on the source-control server or a server serving anything of value) - on a machine that doesn't contain sensitive data.
|
||||
|
||||
**Warning**: At the moment, running the **server** and **agent** on different machines cannot be done due to the server's gRPC port not being exposed publicly (at the Traefik level). If you need to do this, consider submitting a PR to the [Woodpecker CI server role](https://github.com/devture/com.devture.ansible.role.woodpecker_ci_server) to add support for this.
|
||||
|
||||
Small installations which only run trusted CI jobs can afford to run an agent instance on the source-control server itself.
|
||||
|
||||
## Woodpecker CI Server
|
||||
|
||||
### Dependencies
|
||||
|
||||
This service requires the following other services:
|
||||
|
||||
- a [Postgres](postgres.md) database
|
||||
- a [Traefik](traefik.md) reverse-proxy server
|
||||
|
||||
### Configuration
|
||||
|
||||
Until [this Woodpecker CI issue](https://github.com/woodpecker-ci/woodpecker/issues/1636) is solved, Woodpecker CI can only be hosted at its own dedicated domain name, at the root path (`/`). It **cannot** be hosted at a subpath (e.g. `/ci`).
|
||||
|
||||
To enable this service, add the following configuration to your `vars.yml` file and re-run the [installation](../installing.md) process:
|
||||
|
||||
```yaml
|
||||
########################################################################
|
||||
# #
|
||||
# woodpecker-ci-server #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
devture_woodpecker_ci_server_enabled: true
|
||||
|
||||
devture_woodpecker_ci_server_hostname: woodpecker.example.com
|
||||
|
||||
# Generate this secret with `openssl rand -hex 32`
|
||||
devture_woodpecker_ci_server_config_agent_secret: ''
|
||||
|
||||
devture_woodpecker_ci_server_config_admins: [YOUR_USERNAME_HERE]
|
||||
|
||||
# Add one or more usernames that match your version control system (e.g. Gitea) below.
|
||||
# These users will have admin privileges upon signup.
|
||||
devture_woodpecker_ci_server_config_admins:
|
||||
- YOUR_USERNAME_HERE
|
||||
- ANOTHER_USERNAME_HERE
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /woodpecker-ci-server #
|
||||
# #
|
||||
########################################################################
|
||||
```
|
||||
|
||||
In the example configuration above, we configure the service to be hosted at `https://woodpecker.example.com`.
|
||||
|
||||
#### Gitea Integration
|
||||
|
||||
The Woodpecker CI server can integrate with [Gitea](gitea.md) using the following **additional** `vars.yml` configuration:
|
||||
|
||||
```yaml
|
||||
devture_woodpecker_ci_server_provider: gitea
|
||||
|
||||
# We must use the public URL here, because it's also used for login redirects
|
||||
devture_woodpecker_ci_server_config_gitea_url: "{{ gitea_config_root_url }}"
|
||||
|
||||
# Populate these with the OAuth 2 application information
|
||||
# (see the Gitea configuration section above)
|
||||
devture_woodpecker_ci_server_config_gitea_client: GITEA_OAUTH_CLIENT_ID_HERE
|
||||
devture_woodpecker_ci_server_config_gitea_secret: GITEA_OAUTH_CLIENT_SECRET_HERE
|
||||
|
||||
devture_woodpecker_ci_server_container_add_host_domain_name: "{{ gitea_hostname }}"
|
||||
devture_woodpecker_ci_server_container_add_host_ip_address: "{{ ansible_host }}"
|
||||
```
|
||||
|
||||
To integrate with version-control systems other than Gitea, you'll need similar configuration.
|
||||
|
||||
### Usage
|
||||
|
||||
After installation, you should be able to access the Woodpecker CI server instance at `https://woodpecker.DOMAIN` (matching the `devture_woodpecker_ci_server_hostname` value configured in `vars.yml`).
|
||||
|
||||
The **Log in** button should take you to Gitea, where you can authorize Woodpecker CI with the OAuth 2 application.
|
||||
|
||||
Follow the official Woodpecker CI [Getting started](https://woodpecker-ci.org/docs/usage/intro) documentation for additional usage details.
|
||||
|
||||
|
||||
## Woodpecker CI Agent
|
||||
|
||||
As mentioned above, unless you completely trust your CI workloads, it's best to run the Woodpecker CI Agent on another machine.
|
||||
|
||||
### Dependencies
|
||||
|
||||
This service requires the following other services:
|
||||
|
||||
- a Woodpecker CI Server - installed via this playbook or otherwise
|
||||
|
||||
### Configuration
|
||||
|
||||
```yaml
|
||||
########################################################################
|
||||
# #
|
||||
# woodpecker-ci-agent #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
devture_woodpecker_ci_agent_enabled: true
|
||||
|
||||
# If the agent runs on the same machine as the server, enabling the agent
|
||||
# is everything you need. The agent and server will be wired automatically.
|
||||
#
|
||||
# Otherwise, you'll need to configure the variables below:
|
||||
|
||||
# This needs to point to the server's gRPC port.
|
||||
# By default, this port is not exposed, so.. you may need to do some extra work,
|
||||
# which possibly involves contributing a PR to the Woodpecker CI server role:
|
||||
# https://github.com/devture/com.devture.ansible.role.woodpecker_ci_server
|
||||
devture_woodpecker_ci_agent_config_server: ''
|
||||
|
||||
# Enter your server's secret below.
|
||||
# This value must match the `devture_woodpecker_ci_server_config_agent_secret` variable.
|
||||
devture_woodpecker_ci_agent_config_agent_secret: ''
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /woodpecker-ci-agent #
|
||||
# #
|
||||
########################################################################
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
The agent should automatically register with the [Woodpecker CI server](#woodpecker-ci-server) and take jobs from it.
|
|
@ -14,6 +14,12 @@ devture_systemd_service_manager_services_list_auto: |
|
|||
+
|
||||
([{'name': (devture_traefik_identifier + '.service'), 'priority': 3000, 'groups': ['mash', 'traefik', 'reverse-proxies']}] if devture_traefik_enabled else [])
|
||||
+
|
||||
([{'name': (devture_woodpecker_ci_server_identifier + '.service'), 'priority': 4000, 'groups': ['mash', 'woodpecker', 'ci', 'woodpecker-ci-server']}] if devture_woodpecker_ci_server_enabled else [])
|
||||
+
|
||||
([{'name': (devture_woodpecker_ci_agent_identifier + '.service'), 'priority': 4100, 'groups': ['mash', 'woodpecker', 'ci', 'woodpecker-ci-agent']}] if devture_woodpecker_ci_agent_enabled else [])
|
||||
+
|
||||
([{'name': (gitea_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'gitea', 'gitea-server']}])
|
||||
+
|
||||
([{'name': (miniflux_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'miniflux']}] if miniflux_enabled else [])
|
||||
+
|
||||
([{'name': (radicale_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'radicale']}] if radicale_enabled else [])
|
||||
|
@ -55,6 +61,18 @@ devture_postgres_systemd_services_to_stop_for_maintenance_list: |
|
|||
|
||||
devture_postgres_managed_databases_auto: |
|
||||
{{
|
||||
([{
|
||||
'name': gitea_config_database_name,
|
||||
'username': gitea_config_database_username,
|
||||
'password': gitea_config_database_password,
|
||||
}] if gitea_enabled else [])
|
||||
+
|
||||
([{
|
||||
'name': devture_woodpecker_ci_server_database_datasource_db_name,
|
||||
'username': devture_woodpecker_ci_server_database_datasource_username,
|
||||
'password': devture_woodpecker_ci_server_database_datasource_password,
|
||||
}] if devture_woodpecker_ci_server_enabled else [])
|
||||
+
|
||||
([{
|
||||
'name': miniflux_database_name,
|
||||
'username': miniflux_database_username,
|
||||
|
@ -198,6 +216,53 @@ devture_timesync_installation_enabled: false
|
|||
|
||||
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# gitea #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
gitea_enabled: false
|
||||
|
||||
gitea_identifier: "{{ mash_playbook_service_identifier_prefix }}gitea"
|
||||
|
||||
gitea_base_path: "{{ mash_playbook_base_path }}/gitea"
|
||||
|
||||
gitea_uid: "{{ mash_playbook_uid }}"
|
||||
gitea_gid: "{{ mash_playbook_gid }}"
|
||||
|
||||
gitea_systemd_required_systemd_services_list: |
|
||||
{{
|
||||
(['docker.service'])
|
||||
+
|
||||
([devture_postgres_identifier ~ '.service'] if devture_postgres_enabled and gitea_config_database_hostname == devture_postgres_identifier else [])
|
||||
}}
|
||||
|
||||
gitea_container_additional_networks: |
|
||||
{{
|
||||
([mash_playbook_reverse_proxyable_services_additional_network] if mash_playbook_reverse_proxyable_services_additional_network else [])
|
||||
+
|
||||
([devture_postgres_container_network] if devture_postgres_enabled and gitea_config_database_hostname == devture_postgres_identifier and gitea_container_network != devture_postgres_container_network else [])
|
||||
}}
|
||||
|
||||
gitea_container_labels_traefik_enabled: "{{ mash_playbook_traefik_labels_enabled }}"
|
||||
gitea_container_labels_traefik_docker_network: "{{ mash_playbook_reverse_proxyable_services_additional_network }}"
|
||||
gitea_container_labels_traefik_entrypoints: "{{ devture_traefik_entrypoint_primary }}"
|
||||
gitea_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_primary }}"
|
||||
|
||||
gitea_config_database_hostname: "{{ devture_postgres_identifier if devture_postgres_enabled else '' }}"
|
||||
gitea_config_database_port: "{{ '5432' if devture_postgres_enabled else '' }}"
|
||||
gitea_config_database_username: "gitea"
|
||||
gitea_config_database_password: "{{ '%s' | format(mash_playbook_generic_secret_key) | password_hash('sha512', 'db.gitea', rounds=655555) | to_uuid }}"
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /gitea #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# etke/miniflux #
|
||||
|
@ -351,3 +416,95 @@ uptime_kuma_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certR
|
|||
# /etke/uptime_kuma #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# woodpecker-ci-server #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
devture_woodpecker_ci_server_enabled: false
|
||||
|
||||
devture_woodpecker_ci_server_identifier: "{{ mash_playbook_service_identifier_prefix }}woodpecker-ci-server"
|
||||
|
||||
devture_woodpecker_ci_server_uid: "{{ mash_playbook_uid }}"
|
||||
devture_woodpecker_ci_server_gid: "{{ mash_playbook_gid }}"
|
||||
|
||||
devture_woodpecker_ci_server_base_path: "{{ mash_playbook_base_path }}/woodpecker-ci/server"
|
||||
|
||||
devture_woodpecker_ci_server_systemd_required_systemd_services_list: |
|
||||
{{
|
||||
(['docker.service'])
|
||||
+
|
||||
([devture_postgres_identifier ~ '.service'] if devture_postgres_enabled and devture_woodpecker_ci_server_database_datasource_hostname == devture_postgres_identifier else [])
|
||||
}}
|
||||
|
||||
devture_woodpecker_ci_server_container_additional_networks: |
|
||||
{{
|
||||
(
|
||||
([mash_playbook_reverse_proxyable_services_additional_network] if mash_playbook_reverse_proxyable_services_additional_network else [])
|
||||
+
|
||||
([devture_postgres_container_network] if devture_postgres_enabled and devture_woodpecker_ci_server_database_datasource_hostname == devture_postgres_identifier and devture_woodpecker_ci_server_container_network != devture_postgres_container_network else [])
|
||||
) | unique
|
||||
}}
|
||||
|
||||
devture_woodpecker_ci_server_container_labels_traefik_enabled: "{{ mash_playbook_traefik_labels_enabled }}"
|
||||
devture_woodpecker_ci_server_container_labels_traefik_docker_network: "{{ mash_playbook_reverse_proxyable_services_additional_network }}"
|
||||
|
||||
devture_woodpecker_ci_server_database_driver: postgres
|
||||
devture_woodpecker_ci_server_database_datasource: "postgres://{{ devture_woodpecker_ci_server_database_datasource_username }}:{{ devture_woodpecker_ci_server_database_datasource_password }}@{{ devture_woodpecker_ci_server_database_datasource_hostname }}:{{ devture_woodpecker_ci_server_database_datasource_port }}/{{ devture_woodpecker_ci_server_database_datasource_db_name }}?sslmode=disable"
|
||||
|
||||
devture_woodpecker_ci_server_database_datasource_hostname: "{{ devture_postgres_identifier if devture_postgres_enabled else '' }}"
|
||||
devture_woodpecker_ci_server_database_datasource_port: "{{ '5432' if devture_postgres_enabled else '' }}"
|
||||
devture_woodpecker_ci_server_database_datasource_username: woodpecker_ci_server
|
||||
devture_woodpecker_ci_server_database_datasource_password: "{{ '%s' | format(mash_playbook_generic_secret_key) | password_hash('sha512', 'woodpecker.ci', rounds=655555) | to_uuid }}"
|
||||
devture_woodpecker_ci_server_database_datasource_db_name: woodpecker_ci_server
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /woodpecker-ci-server #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# woodpecker-ci-agent #
|
||||
# #
|
||||
########################################################################
|
||||
|
||||
devture_woodpecker_ci_agent_enabled: false
|
||||
|
||||
devture_woodpecker_ci_agent_identifier: "{{ mash_playbook_service_identifier_prefix }}woodpecker-ci-agent"
|
||||
|
||||
devture_woodpecker_ci_agent_uid: "{{ mash_playbook_uid }}"
|
||||
devture_woodpecker_ci_agent_gid: "{{ mash_playbook_gid }}"
|
||||
|
||||
devture_woodpecker_ci_agent_base_path: "{{ mash_playbook_base_path }}/woodpecker-ci/agent"
|
||||
|
||||
devture_woodpecker_ci_agent_systemd_required_systemd_services_list: |
|
||||
{{
|
||||
(['docker.service'])
|
||||
+
|
||||
([devture_woodpecker_ci_server_identifier ~ '.service'] if devture_woodpecker_ci_server_enabled else [])
|
||||
}}
|
||||
|
||||
devture_woodpecker_ci_agent_container_additional_networks: |
|
||||
{{
|
||||
(
|
||||
([devture_woodpecker_ci_server_container_network] if devture_woodpecker_ci_server_enabled and devture_woodpecker_ci_server_container_network != devture_woodpecker_ci_agent_container_network else [])
|
||||
) | unique
|
||||
}}
|
||||
|
||||
devture_woodpecker_ci_agent_config_server: "{{ (devture_woodpecker_ci_server_identifier + ':' + devture_woodpecker_ci_server_config_grpc_addr_port | string) if devture_woodpecker_ci_agent_enabled else '' }}"
|
||||
|
||||
devture_woodpecker_ci_agent_config_agent_secret: "{{ devture_woodpecker_ci_server_config_agent_secret if devture_woodpecker_ci_agent_enabled else '' }}"
|
||||
|
||||
########################################################################
|
||||
# #
|
||||
# /woodpecker-ci-agent #
|
||||
# #
|
||||
########################################################################
|
||||
|
|
|
@ -33,6 +33,12 @@
|
|||
- src: git+https://github.com/devture/com.devture.ansible.role.playbook_runtime_messages.git
|
||||
version: 9b4b088c62b528b73a9a7c93d3109b091dd42ec6
|
||||
|
||||
- src: git+https://github.com/devture/com.devture.ansible.role.woodpecker_ci_server.git
|
||||
version: v0.15.7-1
|
||||
|
||||
- src: git+https://github.com/devture/com.devture.ansible.role.woodpecker_ci_agent.git
|
||||
version: v0.15.7-0
|
||||
|
||||
- src: git+https://gitlab.com/etke.cc/roles/miniflux.git
|
||||
version: v2.0.42-1
|
||||
|
||||
|
@ -45,3 +51,7 @@
|
|||
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-vaultwarden.git
|
||||
name: vaultwarden
|
||||
version: v1.27.0-1
|
||||
|
||||
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-gitea.git
|
||||
name: gitea
|
||||
version: v1.18.5-1
|
||||
|
|
|
@ -44,6 +44,8 @@
|
|||
|
||||
- role: galaxy/com.devture.ansible.role.traefik
|
||||
|
||||
- role: galaxy/gitea
|
||||
|
||||
- role: galaxy/miniflux
|
||||
|
||||
- role: galaxy/radicale
|
||||
|
@ -52,6 +54,9 @@
|
|||
|
||||
- role: galaxy/uptime_kuma
|
||||
|
||||
- role: galaxy/com.devture.ansible.role.woodpecker_ci_server
|
||||
- role: galaxy/com.devture.ansible.role.woodpecker_ci_agent
|
||||
|
||||
- when: devture_systemd_service_manager_enabled | bool
|
||||
role: galaxy/com.devture.ansible.role.systemd_service_manager
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue