LoginSignup
0
0

More than 1 year has passed since last update.

docker-composeで管理しているrailsアプリケーションのGitlab-CIテストが走らない

Posted at

GitlabのCIが動かない!

バイト先でdockerを使ってrailsアプリケーションを管理していましたが,
自動テストをするために以下のサイトを参照してGitlab-CIの設定をしました.
https://www.insight-tec.com/tech-blog/20201222_gitlab_runner/

一通りの設定をして動いたので喜んでいたのもつかの間
気が付いたらこんなエラーが発生していた.

Reinitialized existing Git repository in /home/gitlab-runner/builds/*****/0/*****/*****/.git
Checking out 0cff3126 as master...
warning: failed to remove tmp/***: 許可がありません

ざっくりまとめると,
テストをするためにローカルにデプロイしたいから不要なファイルを削除しようとしたら
許可が無くて削除できないよ!
って感じでした.

なぜこのようなことが起きたか

調査の過程などを省いて結論に飛びますが,
docker-composeを動かす上で,コンテナ内で処理をする際にroot権限で処理されるように設定していました.
その結果,dockerコンテナ内で作成されたファイルやフォルダには管理者権限が付与されるようになっていました.
そのため1回目のテストでは問題なく動きますが,2回目以降では1回目でコンテナ内で作成されたファイルが,
権限の問題で操作ができなくなってしまったと考えています.

解決方法

権限の問題なので方法に関してはいくらでもあると思います.

やり方としては、

  • CIの最後に特定のファイルを削除する処理を追加
  • CIをrootユーザーで実行,または管理者権限のあるユーザーで実行
  • テスト毎に権限の書き換えを事項

今回は3つ目の方法を行いました.
具体的な方法としては
gitlab-runnerにCIを登録する際に,--pre-clone-scriptを追加する方法です.

 sudo gitlab-runner register -n --executor shell --tag-list "blog-sandbox" --url https://gitlab.com/ --registration-token $GITLAB_SPECIFIC_RUNNER_TOKEN --description "shell executor for sandbox"  --pre-clone-script "sudo chown -R gitlab-runner:gitlab-runner ."

これによってクローンの前に権限の書き換えを行うようになります.

またこのままだと管理者の書き換えの際にパスワードを求められたりするので,ユーザーの権限を変更します.
以下のコマンドで/etc/sudoersを開きます.

sudo visudo

そして最後の行に以下の一文を書き加えます.

gitlab-runner ALL=(ALL) NOPASSWD:ALL

これによりgilab-runnerのユーザーがsudoを実行してもパスワードを求められることがなくなり,
CIが動くようになりました.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0