GitHub Actions SelfHostedを試してみた

この記事は[フラー Advent Calendar 2019](https://adventar.org/calendars/4155)の 10 日目の記事です。9日目@seto_inugami さんで「[（ネタがなかったので）2日ほどかけて社内向け端末管理アプリを作ってみた](https://qiita.com/seto_inugami/items/e1750a66052eafa95e1b)」でした。

やっとGithubActionsがGAになりましたね。弊社でも9月終わりぐらいから触っていました。
個人的にすごい気になってた発表があったんです(下記URL
[Self-hosted runners for GitHub Actions is now in beta](https://github.blog/2019-11-05-self-hosted-runners-for-github-actions-is-now-in-beta/#advantages-of-self-hosted-runners)

自宅で~~鯖~~サーバーを持て余していたので動かしてみたくなってしまいました。
ということで以下実際に動かした記録です

## インストール環境
OSはCentOS7(Minimal)を使用します
今回利用するスペックは下記の通りです
<img width="585" alt="スクリーンショット 2019-12-09 20.49.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/90d16377-e0ac-838d-181b-f23a514c3feb.png">
※OSインストールは割愛

## 1. GitHubでrunnerを追加する

Setting -> Actions を開いてAdd runnerをクリックします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/94089959-3b48-e1a9-aa43-9f3f7c3b12f0.png)

- OSを選択します（今回はLinux x64)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/023af331-c074-d654-6dc5-5fd0d16bf542.png)

- モーダルに書いてある通りにコマンドを実際のサーバーで動かして行きます
モーダルからクリップボードにコピーできるので簡単に入力できます

```shell
// Create a folder
$ mkdir actions-runner && cd actions-runner
// Download the latest runner package
$ curl -O https://githubassets.azureedge.net/runners/2.162.0/actions-runner-linux-x64-2.162.0.tar.gz
// Extract the installer
$ tar xzf ./actions-runner-linux-x64-2.162.0.tar.gz
```

上記コマンドでDownloadの項目が終わったのでGithubと接続するためConfigureの項目のコマンドを実行します

```shell
// Create the runner and start the configuration experience
$ ./config.sh --url https://github.com/ManabuSeki/github-actions-test --token ###TOKEN###
// Last step, run it!
$ ./run.sh
```
なんだ　簡単じゃんと思っていたときもありました
はい、動きません！

以下のようなエラーメッセージが

```
Libicu's dependencies is missing for Dotnet Core 3.0
Execute ./bin/installdependencies.sh to install any missing Dotnet Core 3.0 dependencies.
```

メッセージ通りに`./bin/installdependencies.sh` を実行します

```
Need to run with sudo privilege
```
【#･∀･】ﾑｶﾑｶ（ねぇ最初に言って）

sudoを実行できる用にOS側を設定します。（割愛
再度 `sudo` をつけて実行します

```shell
$ sudo ./bin/installdependencies.sh
--------OS Information--------
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

------------------------------
The current OS is Fedora based
--------Redhat Version--------
CentOS Linux release 7.7.1908 (Core)
------------------------------
/bin/yum
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
パッケージ lttng-ust は利用できません。
パッケージ 1:openssl-libs-1.0.2k-19.el7.x86_64 はインストール済みか最新バージョンです
パッケージ krb5-libs-1.15.1-37.el7_7.2.x86_64 はインストール済みか最新バージョンです
パッケージ zlib-1.2.7-18.el7.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ libicu.x86_64 0:50.2-3.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================
 Package                  アーキテクチャー         バージョン                   リポジトリー            容量
=============================================================================================================
インストール中:
 libicu                   x86_64                   50.2-3.el7                   base                   6.9 M

トランザクションの要約
=============================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 6.9 M
インストール容量: 24 M
Downloading packages:
libicu-50.2-3.el7.x86_64.rpm                                                          | 6.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libicu-50.2-3.el7.x86_64                                                     1/1
  検証中                  : libicu-50.2-3.el7.x86_64                                                     1/1

インストール:
  libicu.x86_64 0:50.2-3.el7

完了しました!
-----------------------------
 Finish Install Dependencies
-----------------------------
```
はい、インストールはできました。
再度　`config.sh` を実行します

```
$ ./config.sh --url https://github.com/ManabuSeki/github-actions-test --token ###TOKEN###

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

# Authentication


√ Connected to GitHub

# Runner Registration

Enter the name of runner: [press Enter for github-actions]

√ Runner successfully added
√ Runner connection is good

# Runner settings

Enter name of work folder: [press Enter for _work]

√ Settings Saved.
```

runner nameとwork folderを聞かれましたが、デフォルトで進みます

あとは `./run.sh` を実行する

```shell

$ ./run.sh

√ Connected to GitHub

2019-12-09 12:35:38Z: Listening for Jobs
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/dd86b817-b8e8-c260-74a3-e1f881d0fb53.png)

無事つながりましたね
ではyamlファイルを置いて実際に動くか確かめてみましょう



## 2. github-actionsを利用するためのyamlファイルを作成
github-actionsを利用する為のyamlファイルを作成し masterにpushします

```shell
$ mkdir -p .github/workflows
$ touch .github/workflows/hello_world.yml
```

```hello_world.yml
name: hello_world
on: push
jobs:
  build:
    name: hello
    runs-on: self-hosted
    steps:
      - name: Hello World
        run: echo "Hello World"
```


1.で`./run.sh` を実行したターミナルを見てみると

```shell
2019-12-09 13:09:31Z: Running job: hello
2019-12-09 13:09:38Z: Job hello completed with result: Succeeded
```
という風にログが流れていました。


Actionsタブを開いて見てもちゃんと実行できているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/71cb21de-936a-7d92-360a-b5e797002ce6.png)
めでたしめでたし


## おまけ(サービスとして起動)

`./run.sh`を実行しただけの状態だとターミナルを閉じたら利用できなくなってしまいます(Offline)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51723/0c58a962-3bfa-90be-ba89-e1ce80e57a10.png)

そこでサービスとして立ち上げることにしました。

## 1. サービスのインストール
actions-runnerをインストールしたフォルダに移動し、`./svc.sh` を実行します

```shell
$ cd actions-runner/
$ ./svc.sh
Must run as sudo
```
【#･∀･】ﾑｶﾑｶ
sudoをつけて再度実行します

```
$ sudo ./svc.sh

Usage:
./svc.sh [install, start, stop, status, uninstall]
Commands:
   install [user]: Install runner service as Root or specified user.
   start: Manually start the runner service.
   stop: Manually stop the runner service.
   status: Display status of runner service.
   uninstall: Uninstall runner service.
```

svc.shには上記のコマンドが利用できるらしい
とりあえず `install` してみます

```shell
$ sudo ./svc.sh install
Creating launch runner in /etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service
Run as user: github
Run as uid: 1000
gid: 1000
Created symlink from /etc/systemd/system/multi-user.target.wants/actions.runner.ManabuSeki-github-actions-test.github-actions.service to /etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service.
```
できたようだ

## 2. サービスの起動と停止
1.で作ったサービスの起動と停止も `svc.sh`経由で行う

起動

```shell
sudo ./svc.sh start

/etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service
● actions.runner.ManabuSeki-github-actions-test.github-actions.service - GitHub Actions Runner (ManabuSeki-github-actions-test.github-actions)
   Loaded: loaded (/etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2019-12-09 22:29:49 JST; 7ms ago
 Main PID: 28504 (runsvc.sh)
   CGroup: /system.slice/actions.runner.ManabuSeki-github-actions-test.github-actions.service
           ├─28504 /bin/bash /home/github/actions-runner/runsvc.sh
           └─28507 ./externals/node12/bin/node ./bin/RunnerService.js

12月 09 22:29:49 github-actions.zitaku.net systemd[1]: Started GitHub Actions Runner (ManabuSeki-githu...s).
12月 09 22:29:49 github-actions.zitaku.net runsvc.sh[28504]: .path=/usr/local/bin:/bin:/usr/bin:/usr/lo...in
Hint: Some lines were ellipsized, use -l to show in full.
```

停止

```
$ sudo ./svc.sh stop

/etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service
● actions.runner.ManabuSeki-github-actions-test.github-actions.service - GitHub Actions Runner (ManabuSeki-github-actions-test.github-actions)
   Loaded: loaded (/etc/systemd/system/actions.runner.ManabuSeki-github-actions-test.github-actions.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 月 2019-12-09 22:31:40 JST; 5ms ago
  Process: 28504 ExecStart=/home/github/actions-runner/runsvc.sh (code=exited, status=0/SUCCESS)
 Main PID: 28504 (code=exited, status=0/SUCCESS)

12月 09 22:29:50 github-actions.zitaku.net runsvc.sh[28504]: Started running service
12月 09 22:29:53 github-actions.zitaku.net runsvc.sh[28504]: √ Connected to GitHub
12月 09 22:29:54 github-actions.zitaku.net runsvc.sh[28504]: 2019-12-09 13:29:54Z: Listening for Jobs
12月 09 22:31:40 github-actions.zitaku.net systemd[1]: Stopping GitHub Actions Runner (ManabuSeki-gith......
12月 09 22:31:40 github-actions.zitaku.net runsvc.sh[28504]: Shutting down runner listener
12月 09 22:31:40 github-actions.zitaku.net runsvc.sh[28504]: Sending SIGINT to runner listener to stop
12月 09 22:31:40 github-actions.zitaku.net runsvc.sh[28504]: Exiting...
12月 09 22:31:40 github-actions.zitaku.net runsvc.sh[28504]: Runner listener exited with error code 0
12月 09 22:31:40 github-actions.zitaku.net runsvc.sh[28504]: Runner listener exit with 0 return code, s...d.
12月 09 22:31:40 github-actions.zitaku.net systemd[1]: Stopped GitHub Actions Runner (ManabuSeki-githu...s).
Hint: Some lines were ellipsized, use -l to show in full.
```

これでターミナルを閉じても裏で実行し続けられますね


## 最後に
publicリポジトリでは決して使用しないでください。悪意のあるコードがpushされて、実行環境で実行されてしまう可能性があります。
publicリポジトリの環境では`self hosted`を利用せずとも無料で利用できるので　そちらを利用しましょう

明日の[フラーAdvent Calendar 2019](https://adventar.org/calendars/4155) 11日目はokuzawatsさんで[フラー株式会社でもバグバッシュ大会をやってみた](https://allyourbase.hatenablog.com/entry/fuller-advent-calendar-20191211)です