Gitlab test-runner의 FATAL: the “HOME” is not set 문제

GitLab Runner 문서를 보고 열심히 따라하고 설정까지 마쳤는데 러너가 동작하지 않고 commit을 하면 CI가 한 참 동안을 pending 상태에 있다가 실패했다는 에러 메일 보내 버리는 증상이 있다. Systemctl로 서비스 상태를 보니 제대로 올려지지 않고 ‘inactive’이거나 ‘activating’에 계속 머물러 있다. 하지만 만약 background 서비스로 동작시키지 않고 다음과 같이 run command로 foreground에서 돌리면 잘 동작한다. 환경 설정에는 ‘거의’ 문제가 없다는 뜻 이겠지..

$ sudo /usr/local/bin/gitlab-runner run

Journalctl로 서비스 로그를 보니 FATAL에러가 하나가 잡힌다.

$ journalctl -u gitlab-runner.service

...
gitlab-runner[4622]: FATAL: the "HOME" is not set                      
systemd[1]: gitlab-runner.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: gitlab-runner.service: Failed with result 'exit-code'.

오호라. HOME 환경 변수를 찾으려 했는데 없어서 죽은 거고만! 해결책은 간단히 HOME 환경 변수를 선언해 주면 된다. 서비스 설정파일 (/etc/systemd/system/gitlab-runner.service)를 열고 [Service] 항목에 환경 변수를 추가해 준다. 만약 proxy환경이고 환경변수로 설정하고 있다면 서비스에서는 환경변수를 접근할 수 없으므로 여기에 함께 선언해 준다.

[Unit]
Description=GitLab Runner
After=syslog.target network.target
ConditionFileIsExecutable=/usr/local/bin/gitlab-runner
 
[Service]
Environment=HOME=/home/gitlab-runner # 이 부분을 추가
# 해당하는 경우 proxy 설정
#Environment=no_proxy=노프록시 설정
#Environment=NO_PROXY=노프록시 설정
#Environment=http_proxy=HTTP프록시 주소
#Environment=HTTP_PROXY=HTTP프록시 주소
#Environment=https_proxy=HTTPS프록시 주소
#Environment=HTTPS_PROXY=HTTPS프록시 주소
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/local/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" \
  "--syslog" "--user" "gitlab-runner"

Restart=always
RestartSec=120

[Install]
WantedBy=multi-user.target

이제 서비스를 다시 로드하고 Gitlab runner를 재 시작한다.

$ sudo systemctl daemon-reload
$ sudo /usr/local/bin/gitlab-runner restart

Systemctl에서 상태를 확인한다. 물론 CI test도 함께.

$ sudo systemctl status gitlab-runner.service 
● gitlab-runner.service - GitLab Runner
   Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: disabled)
   Active: active (running) since xxx; 1min 55s ago
 Main PID: 12954 (gitlab-runner)
    Tasks: 9 (limit: 4915)
   Memory: 7.9M
   CGroup: /system.slice/gitlab-runner.service
           └─12954 /usr/local/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner