質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2607閲覧

gitlab ciでテストをパスしたものを、dockerにデプロイしたい

blanccc

総合スコア12

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

GitLab

GitLabは Gitoliteをブラウザから管理できるようにする Rubyアプリケーションで、 GitHubのようなサービスをクローズドな環境に独自で構築できるように 公開されたものです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2017/03/07 10:54

編集2017/03/07 12:20

経緯

ruby on railsで開発をしています。ソースコードの管理に、gitlabを使用することになりました。
gitlab ciで、gitlabにpushした際にテストコードを走らせ、テストのカバレッジを表示する、というところまでは自力でできました。

やりたいこと

テストをパスしたものを、dockerに自動デプロイしたい

使用しているもの

gitlab community edition 8.17
shared runnerはdocker executorです。
dockerfileからイメージを作っています。
dindを試したので、privilaged=trueになっています。

やったこと

  1. specific runnerとしてshell executorのrunnerを作り、docker buildしてみた
    →エラーが出たが、文字化けしていて読めない(エラーコード9009)
  2. sharedでdind

→runnerが閉じると作ったコンテナも消える、docker inspectするとIPアドレスがない
3. sharedでdindしないでdocker buildしてみる
→is daemon running?と言われる
→daemonを起こそうとするとエラーが出る(socketエラー)
4. socketを共有?する(dindはあまりよくないという記事を読んだため)
→はじめは良かったが、docker runしてもすぐにexitするようになった、やはりrunnerが閉じると消える

制約

  • gitlabのバージョンを上げることは難しいです。
  • shared runnerは、私は触れません。

runnerからdockerコンテナを外に作り、デプロイするというのは難しいでしょうか。
また、調べているとcapistranoを使用したものをよく見かけるのですが、dockerにデプロイするのにも利用できるでしょうか。gitlabにはenvironmentsという項目があり、environments:~~~と書くとデプロイできるようなので、現時点ではそれを利用しようと思っています。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同じくgitlab-ciを使っています。個人的な理解ではdockerは使い捨てのビルド環境の整備に使う用途がメインで、runnerを使って永続的なコンテナを立ち上げるのは想定されていないという理解です。

runner終了時にexecutorが起動した子プロセス(おそらくdockerを含む)はKillされるので、blancccさんの環境でも同じことが起こっているのではないかと推測されます。

Gitlab

With this release, Runner creates a single temporary bash script which contains all the commands the build needs. The script itself is then executed as a child process in its own session (process group) by the runner. This way we can ensure that killing the script also kills all its child processes.

ちなみにshared runnerからdetachedモード(-d)でdocker runするとどうなりますか?(ただこのやり方だとゾンビプロセスがビルドサーバ上に蓄積されていくので、新しいものを立ち上げる前に、きちんと古いコンテナのUUIDを探してkillする必要があります)

個人的には、開発サーバへのデプロイはdocker-composeを使って、

docker build
docker-compose pull
docker-compose restart

のようにしています。こうするとdocker-composeが最新のイメージに更新して、自動的にタグを見つけて現在起動中のコンテナを再起動してくれます。なのでpsしてuuidをgrepしてというようなことをしなくてもよくなります。

投稿2017/03/07 17:12

編集2017/03/07 17:42
shuntksh

総合スコア196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問