185 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | |
| - name: Initial one-time setup for the Act Runner, Gitea's Action runner
 | |
|   hosts: gitrunner
 | |
|   become: yes
 | |
|   vars:    
 | |
|     gitea_runner_version: "0.2.13"
 | |
|     # Token has to be generated here https://git.phyllo.me/user/settings/actions/runners and paste here, like:
 | |
|     # registration_token: "asdlkhgalsdhlgksdahklds"
 | |
|     registration_token: ""
 | |
|     
 | |
|   tasks:
 | |
|     - name: Create act runner user
 | |
|       ansible.builtin.user:
 | |
|         name: "act_runner"
 | |
|         system: yes
 | |
|         shell: /bin/bash
 | |
|         home: "/var/lib/act_runner"
 | |
|         create_home: yes
 | |
|         state: present
 | |
| 
 | |
|     - name: Create /etc/act_runner directory
 | |
|       ansible.builtin.file:
 | |
|         path: /etc/act_runner
 | |
|         state: directory
 | |
|         owner: "act_runner"
 | |
|         group: "act_runner"
 | |
|         mode: '0755'
 | |
| 
 | |
|     - name: Install Act Runner
 | |
|       ansible.builtin.get_url:
 | |
|         url: "https://gitea.com/gitea/act_runner/releases/download/v{{ gitea_runner_version }}/act_runner-{{ gitea_runner_version }}-linux-amd64"
 | |
|         dest: "/usr/local/bin/act_runner"
 | |
|         mode: '0755'
 | |
|         force: "{{ (ansible_facts['cmdline']['force'] is defined) | default(false) }}"
 | |
|       retries: 3
 | |
|       delay: 5
 | |
| 
 | |
|     - name: Create Act Runner configuration file
 | |
|       ansible.builtin.copy:
 | |
|         content: |
 | |
|           log:
 | |
|             # The level of logging, can be trace, debug, info, warn, error, fatal
 | |
|             level: info
 | |
| 
 | |
|           runner:
 | |
|             # Where to store the registration result.
 | |
|             file: /var/lib/act_runner/.runner
 | |
|             # Execute how many tasks concurrently at the same time.
 | |
|             capacity: 1
 | |
|             # Extra environment variables to run jobs.
 | |
|             #envs:
 | |
|             #  A_TEST_ENV_NAME_1: a_test_env_value_1
 | |
|             #  A_TEST_ENV_NAME_2: a_test_env_value_2
 | |
|             # Extra environment variables to run jobs from a file.
 | |
|             # It will be ignored if it's empty or the file doesn't exist.
 | |
|             env_file: .env
 | |
|             # The timeout for a job to be finished.
 | |
|             # Please note that the Gitea instance also has a timeout (3h by default) for the job.
 | |
|             # So the job could be stopped by the Gitea instance if it's timeout is shorter than this.
 | |
|             timeout: 1h
 | |
|             # The timeout for the runner to wait for running jobs to finish when shutting down.
 | |
|             # Any running jobs that haven't finished after this timeout will be cancelled.
 | |
|             shutdown_timeout: 0s
 | |
|             # Whether skip verifying the TLS certificate of the Gitea instance.
 | |
|             insecure: false
 | |
|             # The timeout for fetching the job from the Gitea instance.
 | |
|             fetch_timeout: 5s
 | |
|             # The interval for fetching the job from the Gitea instance.
 | |
|             fetch_interval: 2s
 | |
|             # The labels of a runner are used to determine which jobs the runner can run, and how to run them.
 | |
|             # Like: "macos-arm64:host" or "ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
 | |
|             # Find more images provided by Gitea at https://gitea.com/docker.gitea.com/runner-images .
 | |
|             # If it's empty when registering, it will ask for inputting labels.
 | |
|             # If it's empty when execute `daemon`, will use labels in `.runner` file.
 | |
|             labels:
 | |
|               - "fedora-rawhide-latest:host:local"
 | |
| 
 | |
|           cache:
 | |
|             # Enable cache server to use actions/cache.
 | |
|             enabled: true
 | |
|             # The directory to store the cache data.
 | |
|             # If it's empty, the cache data will be stored in $HOME/.cache/actcache.
 | |
|             dir: ""
 | |
|             # The host of the cache server.
 | |
|             # It's not for the address to listen, but the address to connect from job containers.
 | |
|             # So 0.0.0.0 is a bad choice, leave it empty to detect automatically.
 | |
|             host: ""
 | |
|             # The port of the cache server.
 | |
|             # 0 means to use a random available port.
 | |
|             port: 0
 | |
|             # The external cache server URL. Valid only when enable is true.
 | |
|             # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself.
 | |
|             # The URL should generally end with "/".
 | |
|             external_server: ""
 | |
| 
 | |
|           container:
 | |
|             # Specifies the network to which the container will connect.
 | |
|             # Could be host, bridge or the name of a custom network.
 | |
|             # If it's empty, act_runner will create a network automatically.
 | |
|             network: ""
 | |
|             # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker).
 | |
|             privileged: false
 | |
|             # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway).
 | |
|             options:
 | |
|             # The parent directory of a job's working directory.
 | |
|             # NOTE: There is no need to add the first '/' of the path as act_runner will add it automatically. 
 | |
|             # If the path starts with '/', the '/' will be trimmed.
 | |
|             # For example, if the parent directory is /path/to/my/dir, workdir_parent should be path/to/my/dir
 | |
|             # If it's empty, /workspace will be used.
 | |
|             workdir_parent:
 | |
|             # Volumes (including bind mounts) can be mounted to containers. Glob syntax is supported, see https://github.com/gobwas/glob
 | |
|             # You can specify multiple volumes. If the sequence is empty, no volumes can be mounted.
 | |
|             # For example, if you only allow containers to mount the `data` volume and all the json files in `/src`, you should change the config to:
 | |
|             # valid_volumes:
 | |
|             #   - data
 | |
|             #   - /src/*.json
 | |
|             # If you want to allow any volume, please use the following configuration:
 | |
|             # valid_volumes:
 | |
|             #   - '**'
 | |
|             valid_volumes: []
 | |
|             # overrides the docker client host with the specified one.
 | |
|             # If it's empty, act_runner will find an available docker host automatically.
 | |
|             # If it's "-", act_runner will find an available docker host automatically, but the docker host won't be mounted to the job containers and service containers.
 | |
|             # If it's not empty or "-", the specified docker host will be used. An error will be returned if it doesn't work.
 | |
|             docker_host: ""
 | |
|             # Pull docker image(s) even if already present
 | |
|             force_pull: true
 | |
|             # Rebuild docker image(s) even if already present
 | |
|             force_rebuild: false
 | |
| 
 | |
|           host:
 | |
|             # The parent directory of a job's working directory.
 | |
|             # If it's empty, $HOME/.cache/act/ will be used.
 | |
|             workdir_parent:
 | |
|         dest: /etc/act_runner/config.yaml
 | |
|         owner: "act_runner"
 | |
|         group: "act_runner"
 | |
|         mode: '0755'
 | |
|         backup: yes
 | |
| 
 | |
|     - name: Check if runner is already registered
 | |
|       ansible.builtin.stat:
 | |
|         path: /var/lib/act_runner/.runner
 | |
|       register: runner_registered
 | |
|       changed_when: false
 | |
| 
 | |
|     - name: Register the runner with Gitea (if not already registered)
 | |
|       ansible.builtin.command: >
 | |
|         /usr/local/bin/act_runner register 
 | |
|         --no-interactive
 | |
|         --config /etc/act_runner/config.yaml 
 | |
|         --instance https://git.phyllo.me 
 | |
|         --token {{ registration_token }}
 | |
|         --name fraw-bios-0
 | |
|       when: not runner_registered.stat.exists
 | |
|       changed_when: true
 | |
| 
 | |
|     - name: Create Act Runner service file
 | |
|       ansible.builtin.copy:
 | |
|         content: |
 | |
|           [Unit]
 | |
|           Description=Gitea Actions Runner
 | |
|           Documentation=https://gitea.com/gitea/act_runner
 | |
|           After=network.target
 | |
|           
 | |
|           [Service]
 | |
|           ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml
 | |
|           ExecReload=/bin/kill -s HUP $MAINPID
 | |
|           WorkingDirectory=/var/lib/act_runner
 | |
|           TimeoutSec=0
 | |
|           Restart=always
 | |
|           RestartSec=10
 | |
|           
 | |
|           [Install]
 | |
|           WantedBy=multi-user.target
 | |
|         dest: /etc/systemd/system/act_runner.service
 | |
|         mode: '0755'
 | |
|         backup: yes
 | |
| 
 | |
|     - name: Ensure act_runner service is enabled and started
 | |
|       ansible.builtin.systemd:
 | |
|         name: act_runner
 | |
|         enabled: yes
 | |
|         state: started
 | |
|         daemon_reload: yes |