[github] self-hosted runner

self-hosted runner 실행을 위해서 github 도움말에는 다음과 같이 안내하고 있다.

mkdir actions-runner && cd actions-runner

curl -o actions-runner-linux-x64-2.285.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.285.1/actions-runner-linux-x64-2.285.1.tar.gz

echo "5fd98e1009ed13783d17cc73f13ea9a55f21b45ced915ed610d00668b165d3b2  actions-runner-linux-x64-2.285.1.tar.gz" | shasum -a 256 -c

tar xzf ./actions-runner-linux-x64-2.285.1.tar.gz

./config.sh --url https://github.com/dasomoli/repository --token TOKENTOKENTOKENTOKEN

./run.sh

여기서 config.sh 에 넘기는 토큰은 REST API를 사용하는 다음 명령어로 얻을 수 있다.

curl \
  -u USER_NAME:YOUR_PERSONAL_ACCESS_TOKEN -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/USER_NAME/REPO_NAME/actions/runners/registration-token

다음과 같이 jq를 이용해서 .token 값을 가져와서 쉘 변수 내에 설정하는 것도 가능하다.

RUNNER_TOKEN="$(curl -XPOST -fsSL \
        -H "Authorization: token YOUR_PERSONAL_ACCESS_TOKEN" \
        -H "Accept: application/vnd.github.v3+json" \
        "https://api.github.com/repos/USER_NAME/REPO_NAME/actions/runners/registration-token" \
        | jq -r '.token')"

config.shbin/installdependencies.sh 를 실행하고, 나중에 Runner.Listner를 실행한다. 이 때 넘기는 인자는 bin/Runner.Listener configure 뒤에 인자로 넘어간다. config.sh의 다음 줄에서 확인할 수 있다.

 77 if [[ "$1" == "remove" ]]; then
 78     ./bin/Runner.Listener "$@"
 79 else
 80     ./bin/Runner.Listener configure "$@"
 81 fi

systemd를 사용하는 리눅스 시스템의 경우 서비스로 설치해서 사용하려면 다음과 같이 하면 된다고 한다.

sudo ./svc.sh install

sudo ./svc.sh start

[Docker] github action self-hosted runner setup

도커로 github action self-hosted runner 를 셋팅하자.

github의 Settings / Developer Settings / Personal access tokens에서 repo, workflow, write:packages, admin:org 를 체크하여 Personal Access Token을 하나 만든다.

git clone https://github.com/justin-themedium/github-runner-docker.git
docker run --name mdl-core-2.2-runner -e GITHUB_ACCESS_TOKEN=<PERSONAL_ACCESS_TOKEN> -e RUNNER_REPOSITORY_URL=<GIT_REPOSITORY_URL> -v /var/run/docker.sock:/var/run/docker.sock --detach --restart unless-stopped test-runner-2.285.1

dockerfile 내에 필요한 것이 있다면 수정 후, docker 이미지를 빌드한다.

cd github-runner-docker
docker build -t test-runner-2.285.1 .

실행은 다음과 같이 한다.

docker run --name <RUNNER-NAME> -e GITHUB_ACCESS_TOKEN=<PERSONAL_ACCESS_TOKEN> -e RUNNER_REPOSITORY_URL=<GIT_REPOSITORY_URL> -v /var/run/docker.sock:/var/run/docker.sock --detach --restart unless-stopped test-runner-2.285.1

여기서 -v /var/run/docker.sock:/var/run/docker.sock 는 docker 컨테이너 안에서 docker를 사용하기 위함이다.

멈출 때는 다음과 같이 한다.

docker stop <RUNNER-NAME>
docker rm <RUNNER-NAME>

다른 방법으로 https://github.com/myoung34/docker-github-actions-runner 도 참고할 만 하다.