Split act-runner into its own pod. (#71)

```
$ laconic-so --stack act-runner deploy init --output act-runner.yml

$ laconic-so --stack act-runner deploy create --spec-file act-runner.yml --deployment-dir ~/opt/deployments/act-runner-1
$ echo "CERC_GITEA_RUNNER_REGISTRATION_TOKEN=FOO" >> ~/opt/deployments/act-runner-1/config.env
$ laconic-so deployment --dir ~/opt/deployments/act-runner-1 up
```

Reviewed-on: #71
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
This commit was merged in pull request #71.
This commit is contained in:
2023-10-27 18:58:57 +00:00
committed by telackey
parent dcc6c62209
commit e4690d4742
8 changed files with 37 additions and 25 deletions
-33
View File
@@ -1,33 +0,0 @@
FROM ubuntu:22.04
# Set system time zone to prevent the tzdata package from hanging looking for user input
RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
# Install basic tools
RUN apt update && apt install -y gpg curl apt-transport-https ca-certificates lsb-release build-essential
# Add Docker repo
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
ARG NODE_MAJOR=18
# Add NodeJS repo
# See: https://stackoverflow.com/a/77021599/1701505
RUN set -uex; \
apt-get update; \
apt-get install -y ca-certificates curl gnupg; \
mkdir -p /etc/apt/keyrings; \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
| gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \
> /etc/apt/sources.list.d/nodesource.list; \
apt-get update; \
apt-get install nodejs -y;
# Install Docker
RUN apt update && apt install -y docker-ce && rm -rf /var/lib/apt/lists/*
# Install sudo because some actions projects assume it is present, and it is present in GitHub runners
RUN apt update && apt install -y sudo
# Install software-properties-common so we have the add-apt-repository command, used by some actions to add a package repo
RUN apt update && apt install -y software-properties-common
+1 -1
View File
@@ -29,4 +29,4 @@ Details on how to setup remote debugging of the gitea server inside its containe
#### Action Runners
A Dockerized action runner is deployed by default for the labels `ubuntu-latest` and `ubuntu-22.04`. Details on deploying
additional runners can be found [here](act-runner.md).
additional runners can be found [here](../act-runner/act-runner.md).
-48
View File
@@ -1,48 +0,0 @@
# Example configuration file, it's safe to copy this as the default config file without any modification.
log:
# The level of logging, can be trace, debug, info, warn, error, fatal
level: info
runner:
# Where to store the registration result.
file: /data/.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: 3h
# 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
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: "gitea.local"
# The port of the cache server.
# 0 means to use a random available port.
port: 8088
container:
# Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker).
privileged: true
# And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway).
options: --add-host=gitea.local:host-gateway --volume "/var/lib/docker"
-22
View File
@@ -42,28 +42,6 @@ services:
volumes:
- postgres-data:/var/lib/postgresql/data
runner:
image: cerc/act-runner:local
restart: always
environment:
# Note: eMdEwIzSo87nBh0UFWZlbp308j6TNWr3WhWxQqIc is a static token we use for convenience in stand-alone deployments. Not secure, obviously.
- GITEA_RUNNER_REGISTRATION_TOKEN=${CERC_GITEA_RUNNER_REGISTRATION_TOKEN:-eMdEwIzSo87nBh0UFWZlbp308j6TNWr3WhWxQqIc}
- GITEA_INSTANCE_URL=http://gitea.local:3000
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://cerc/act-runner-task-executor:local,ubuntu-22.04:docker://cerc/act-runner-task-executor:local
- CONFIG_FILE=/config/act-runner-config.yml
extra_hosts:
- "gitea.local:host-gateway"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- act-runner-data:/data
- act-runner-config:/config:ro
ports:
- 8088:8088
volumes:
gitea-data:
postgres-data:
act-runner-data:
act-runner-config:
-25
View File
@@ -1,25 +0,0 @@
# Copyright © 2023 Vulcanize
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
from pathlib import Path
from shutil import copy
def create(context, extra_args):
# Our goal here is just to copy the config file for act
deployment_config_dir = context.deployment_dir.joinpath("data",
"act-runner-config")
source_config_file = Path(context.command_context.cluster_context.compose_files[0]).parent.joinpath("config", "act-runner-config.yml")
copy(source_config_file, deployment_config_dir)