Introduction

備忘録。

自宅のNAS上で動いているGitLabの証明書 (Let’s Encrypt) が期限切れになり、更新した影響かGitLab Runnerが動かなくなった。
Windowsで動いているのは恐らく OpenSSL に依存していないからだと思われるが、それはどうでもいい。

GitLabがRunnerを認識しないのである。

Resolution

Linux

Ubuntu上でデーモンとして動いているGitLab Runnerのログを見てみてみたところ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sudo systemctl status gitlab-runner
● gitlab-runner.service - GitLab Runner
Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-05-08 20:24:19 JST; 1min 31s ago
Main PID: 5825 (gitlab-runner)
Tasks: 13 (limit: 4915)
CGroup: /system.slice/gitlab-runner.service
└─5825 /usr/local/bin/gitlab-runner run --working-directory /home/test-user --config /etc/gitlab-runner/config.toml --service gitlab-runner --user test-user

5月 08 20:25:22 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:25 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:28 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:31 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:34 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:37 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:40 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:43 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:46 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
5月 08 20:25:49 DEVPC gitlab-runner[5825]: WARNING: Checking for jobs... failed runner=k6EM9xx8 status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority

上に書いたように、証明書のエラーが出ていた。

実行時では無くて登録時にこのエラーが出ることもあるらしく、解決策は下記に書かれていた。

兎に角、GitLabで使用している証明書をGitLab Runner似認識させる必要があり、その証明を端末に展開すれば良い。
GitLabのホスト名が hoge.xxx.yyy とした場合、証明書を展開するのは下記のような感じになる。

1
2
3
4
sudo mkdir -p /etc/gitlab-runner/certs
sudo scp admin@192.168.123.123:/home/gitlab/certs/gitlab.crt /etc/gitlab-runner/certs/hoge.xxx.yyy.crt
sudo chown -R $USER:$USER /etc/gitlab-runner
sudo systemctl restart gitlab-runner

途中の chown は不要かもしれない。

OSX

GitLab-Runnerのログの出力先が syslog になっている。
ここが嵌りどころで、通常、 syslog の出力先は /var/log/system.log になるが、OSXの Sierra から、

  • ASL (Apple System Logger) という統合ログ環境に変更
  • Console.app か log コマンドで閲覧可能

と変わってしまった。
独自仕様が大好きな Apple の悪い癖だと思う。

Console.app は下記のような感じ。

Console
Console

が、ログを見ると状況が違う。

まず、状況はLinuxと一緒で、証明書の更新は必要。
手動で、GitLab Runnerをキックすると、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/usr/local/bin/gitlab-runner run \
--working-directory /Users/test-user/Work/OpenSource \
--config /Users/test-user/.gitlab-runner/config.toml
Runtime platform arch=amd64 os=darwin pid=58194 revision=775dd39d version=13.8.0
Starting multi-runner from /Users/test-user/.gitlab-runner/config.toml... builds=0
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...

Configuration loaded builds=0
listen_address not defined, metrics & debug endpoints disabled builds=0
[session_server].listen_address not defined, session endpoints disabled builds=0
WARNING: Checking for jobs... failed runner=oZ-q7hru status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority
WARNING: Checking for jobs... failed runner=oZ-q7hru status=couldn't execute POST against https://xxxx:443/api/v4/jobs/request: Post https://xxxx:443/api/v4/jobs/request: x509: certificate signed by unknown authority

のように証明書エラーがでる。
同様に、証明書を置き換えれば良い。
自分の環境では、GitLab Runnerがホームにいもいるので、

1
2
3
sudo mkdir -p ~/.gitlab-runner/certs
sudo scp admin@192.168.123.123:/home/gitlab/certs/gitlab.crt ~/.gitlab-runner/certs/hoge.xxx.yyy.crt
sudo chown -R $USER ~/.gitlab-runner

最後の chown は不要かもしれないが、これでエラーは消えるが、これはデーモンでは無く、自分でキックした場合であるので根本の解決策では無い。

Console.appを見ると、

1
2
May 15 11:38:41 MacMini com.apple.xpc.launchd[1] (gitlab-runner[96477]): Service exited with abnormal code: 1
May 15 11:38:41 MacMini com.apple.xpc.launchd[1] (gitlab-runner): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.

と、そもそもサービスとして動いていないようである。

検索してみると、下記が見つかった。

GitLabとして公式の解決では無いが、サービスの設定である /Library/LaunchDaemons/gitlab-runner.plist に対して

  • LaunchDaemon の規約に合わせて、Label を org.gitlab.gitlab-runner に変更
  • --user some-user<key>UserName</key><string>some-user</string> に変更
  • デバッグ用に StandardOutPathStandardErrorPath を追加

と言う対応で治った模様。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- <key>Label</key><string>gitlab-runner</string>
+ <key>Label</key>
+ <string>org.gitlab.gitlab-runner</string>

..

<string>--syslog</string>

- <string>--user</string>

- <string>some-user</string>

</array>

+<key>UserName</key>
+<string>some-user</string>

+<key>StandardOutPath</key>
+<string>/var/log/gitlab-runner.log</string>
+<key>StandardErrorPath</key>
+<string>/var/log/gitlab-runner.log</string>

証明書をシステムの /etc/gitlab-runner/certs に展開し、マシンを再起動すれば Runner を GitLab が認識する。