GitHub Actions의 셀프 호스트 러너를 GCP에 30분 만에 세워보세요

소개



github actions의 self host runner를 시도하지 않았기 때문에 이번에는 시도했습니다.

self host runner란?



github 액션의 CI/CD 기능은 특별히 설정하지 않는 한 github 측이 제공하는 인프라에서 실행됩니다.
self host runner를 사용하면 가동 인프라 기반을 직접 준비 할 수 있습니다.
공식 문서는 이쪽

이번 설계 이미지



셀프 호스트 러너를 gcp GCE에 설치하십시오.
물론 OS는 리눅스

건설



1. 리포지토리, 인프라 준비 ⛹️‍♂️



먼저 리포지토리를 준비하십시오.
평소와 같이 저장소를 만듭니다.

typo 한 용서 ...

Setting > Actions 탭에서 셀프 호스트 러너를 활성화하는 버튼이 있으므로 여기를 클릭하십시오.

그렇다면 소개 가이드가 나오기 때문에 일단 이것으로 괜찮습니다.


계속해서 인프라 준비.
특히 아무것도 괴롭히지 않고 e2-micro로 만들었습니다.


2. runner 설치, 시작 💊



작성한 인스턴스에 ssh하고, 방금 전 github쪽으로 나온 도입 가이드를 따라 실행해 갑니다
sakas1231@actions-test:~$ mkdir actions-runner && cd actions-runner
sakas1231@actions-test:~/actions-runner$ curl -O -L https://github.com/actions/runner/releases/download/v2.273.5/actions-runner-linux-x64-2.273.5.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   665  100   665    0     0   3243      0 --:--:-- --:--:-- --:--:--  3243
100 72.0M  100 72.0M    0     0  57.1M      0  0:00:01  0:00:01 --:--:-- 99.5M
sakas1231@actions-test:~/actions-runner$ tar xzf ./actions-runner-linux-x64-2.273.5.tar.gz
sakas1231@actions-test:~/actions-runner$ ./config.sh --url https://github.com/KatsuyaAkasaka/actinosSHR_sample --token xxxxxx
'Libicus dependencies is missing for Dotnet Core 3.0
Execute ./bin/installdependencies.sh to install any missing Dotnet Core 3.0 dependencies.'

# うまく行かなかったので、エラー通り以下スクリプトを実行
sakas1231@actions-test:~/actions-runner$ sudo ./bin/installdependencies.sh
...

# 再度実行
sakas1231@actions-test:~/actions-runner$ ./config.sh --url https://github.com/KatsuyaAkasaka/actinosSHR_sample --token xxxxxx

--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------

# Authentication
...

# ok これでホストランナーが起動したことになる
sakas1231@actions-test:~/actions-runner$ ./run.sh

√ Connected to GitHub

2020-11-01 07:02:29Z: Listening for Jobs

실제로 프로덕션 환경에서 실행하는 경우는/etc/rc.local에 기동 스크립트 쓰거나, GCE의 이야기로 말하면 startup-script 옵션이 있으므로 거기에 지정하는 등의 대응이 필요할 것 같습니다만 이번은 이대로 방치 .

actions 탭의 runners 목록을 보면 Idle이되어 있음을 알 수 있습니다.


3. github actions 실행 스크립트 작성 🛠



쉽게 echo하는 스크립트를 만들었습니다.

.github/workflows/test.yaml
name: actions_test
on:
    # Trigger the workflow on push or pull request,
    # but only for the main branch
  push:
    branches:
      - master
jobs:
  job1:
    runs-on: self-hosted
    # ステップの出力をジョブの出力にマップ
    outputs:
      output1: ${{ steps.step1.outputs.test }}
      output2: ${{ steps.step2.outputs.test }}
    steps:
    - id: step1
      run: echo "::set-output name=test::hello"
    - id: step2
      run: echo "::set-output name=test::world"
  job2:
    runs-on: self-hosted
    needs: job1
    steps:
    - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}
.github/workflows 아래에 yaml yml 파일을 만드는 것으로 인식합니다.
↑의 yaml은 master push가 실행될 때 실행되는 작업입니다.

셀프 호스트 러너를 시작하면 러너가 자동으로 self-hosted라는 레이블을 붙이므로 runs-on와 같이 설정하여 마스터 푸시 중에 셀프 호스트 러너에서 실행되도록합니다.name를 생략하면 파일 이름이 그대로 빌드 이름이됩니다.

4. 동작 확인 🎉



이제 github actions가 성공적으로 실행되고 있는지 확인하십시오.







안전하게 echo되어 있는지 확인했습니다. 🎉

요약



셀프 호스트 러너의 도입 자체는 처음이었습니다.
그러나 보안을 위해 셀프 호스트 러너에 대한 인바운드 부분이 마음에 들지 않으므로 github에서 오는 요청의 IP 범위와 포트가 지정되었는지 확인하고 좁힐 필요가 있습니다.

좋은 웹페이지 즐겨찾기