GitHub Actionsのself-hosted runner
githubGitHub Actionsのself-hosted runnerは GitHubがホストする環境以外でジョブを実行できる機能。 権限やネットワークなどの都合で特定の環境でしか実行できない処理を行うことができ、GitHubへロングポーリングしてジョブを待ち構えるのでwebhookのように外からアクセスできるようにする必要がない。 実行時間やストレージによる料金は発生しない。
self-hosted runnerは単一リポジトリだけではなくOrganization、Enterprise単位でも追加できる。Settings->ActionsからAdd runnerするとOS/アーキテクチャごとのself-hosted runner アプリケーションのインストールコマンドが出てくるので実行する。アップデートは自動で行われ、失敗し続けてバージョンが古くなるとジョブが実行できなくなる。
Dockerで動かす。
$ cat Dockerfile
FROM debian:buster
ARG USERNAME=user
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ARG APP_VERSION=2.273.6
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
USER $USERNAME
WORKDIR /home/$USERNAME
RUN sudo apt-get install -y curl && \
mkdir actions-runner && cd actions-runner && \
curl -O -L https://github.com/actions/runner/releases/download/v2.273.6/actions-runner-linux-x64-${APP_VERSION}.tar.gz && \
tar xzf ./actions-runner-linux-x64-${APP_VERSION}.tar.gz
WORKDIR /home/$USERNAME/actions-runner
RUN sudo ./bin/installdependencies.sh
CMD ./config.sh --url $REPOSITORY_URL --token $TOKEN && ./run.sh
$ docker build -t runner .
$ docker run -e REPOSITORY_URL=https://github.com/***/**** -e TOKEN=**** runner
接続に成功するとリストに追加されステータスがIdleになる。
runs-onでself-hostedを指定するとself-hosted runnerで実行させることができ、アーキテクチャなどの条件に合うものがリポジトリのrunnerから優先して使われる。
name: self-hosted-runner-test
on: push
jobs:
self-hosted-job:
runs-on: [self-hosted, linux]
steps:
- id: step1
run: echo "this job runs on self hosted runner"
hosted-job:
runs-on: ubuntu-latest
needs: self-hosted-job
steps:
- run: echo "this job runs on github hosted runner"
指定したジョブがself-hosted runnerで実行されていることが確認できる。
2020-11-07 03:11:24Z: Listening for Jobs
2020-11-07 03:15:26Z: Running job: self-hosted-job
2020-11-07 03:15:33Z: Job self-hosted-job completed with result: Succeeded