アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

GitHub Actions Self-Hosted-RunnerのJust In Time Runnerを動かすDockerイメージを作成する

Dockerfile

  • ユーザー actions-runner を作成する
  • ghコマンドをインストールする
FROM docker.io/ubuntu:jammy

ENV REPO_URL=
ENV REPO_ORG=
ENV REPO_NAME=
ENV GITHUB_TOKEN=
ENV RUNNER_BASE_NAME=

ENV NONINTERACTIVE=1

RUN apt-get -y update
RUN apt-get -y install \
    curl bash sudo gcc uuid git jq

RUN mkdir actions-runner && cd actions-runner \
    && curl -o actions-runner-linux-x64-2.311.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-x64-2.311.0.tar.gz \
    && echo "29fc8cf2dab4c195bb147384e7e2c94cfd4d4022c793b346a6175435265aa278  actions-runner-linux-x64-2.311.0.tar.gz" | sha256sum -c \
    && tar xzf ./actions-runner-linux-x64-2.311.0.tar.gz
RUN ./actions-runner/bin/installdependencies.sh

RUN useradd --uid 1001 --create-home --shell /bin/bash -G sudo,root actions-runner
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

ENV HOMEBREW_NO_INSTALL_CLEANUP=disable
RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
RUN /home/linuxbrew/.linuxbrew/bin/brew install gh

COPY entry_point.sh .
USER actions-runner
WORKDIR /home/actions-runner
RUN echo 'export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"' >>  $HOME/.rc

CMD ["/entry_point.sh"]

entry_point.sh

jitconfigを作成するAPIを叩いてrunnerを起動します。
プロダクションで使用する場合は、jitconfigを作成する部分は外部で叩いてjitconfigだけ渡せると良いでしょう。

#!/usr/bin/env bash

source .rc

jitconfig=$(
    gh api \
        --method POST \
        -H "Accept: application/vnd.github+json" \
        -H "X-GitHub-Api-Version: 2022-11-28" \
        /repos/$REPO_ORG/$REPO_NAME/actions/runners/generate-jitconfig \
        -f name=$RUNNER_BASE_NAME-$(uuid) \
        -F runner_group_id=1 \
        -f "labels[]=self-hosted" -f "labels[]=X64" -f "labels[]=Linux" \
        -f work_folder='work'
)
encoded_jit_config=$(echo $jitconfig | jq --raw-output .encoded_jit_config)
echo $encoded_jit_config

/actions-runner/run.sh --jitconfig $encoded_jit_config