Fuelphpのテストをdocker-composeとJenkinsで実行
by
gree_tech
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
FuelphpのテストをJenkinsと docker-composeで実行
Slide 2
Slide 2 text
Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/
Slide 3
Slide 3 text
LIMIAとは? ● メディアサービス ● Android, iOS, Web ● 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 ● AWS:90%、GCP:10%。 ● PHP/EC2 → Go/ECS移行中
Slide 4
Slide 4 text
Fuelphpが。。。 ● 最近バージョンアップの話を聞かない ● Githubを確認すると、最後のcommitが2018年5月 ● Laravelに行く? いや、コンテナ考えたらgolangでしょ! —> golangに移行開始したばかりですが、さっそくJenkinsでハマったことに ついて話します。
Slide 5
Slide 5 text
移行したシステムについて
Slide 6
Slide 6 text
開発環境 ● まず、他との繋がりが薄いRecommendEngineをgolangで書いてコンテナ を作った。 ● php, MySQL, memcached, DynamoDB Local, elasticmqもコンテナにし て、開発環境をdocker-composeで作った。 ● 本番環境はgolangのみECSで動かし、phpはEC2で。
Slide 7
Slide 7 text
本番環境 ユーザが記事の一覧表示をしようとすると、 EC2で動く fuel PHP ApplicationにHTTPリクエストが飛ぶ。PHP Appは、ECSで動くgolang Serviceにgrpcで問い合わ せる。PHP Appはgolangからの応答に後処理を行 なってユーザに返す。
Slide 8
Slide 8 text
APIの結合テスト
Slide 9
Slide 9 text
テストについて ● UnitTestだけでなく、APIの結合テストもFuel phpのテストを書いていた。 ● レスポンスのIFをかなり網羅していたので、リファクタのときには重要。 ● GitのDevelop branchにmergeされるとJenkinsでテストが走り、成功したら結合テスト環境に配布してい た。 —> 実装完了してmergeしたらテストが失敗。何故!?
Slide 10
Slide 10 text
テストが失敗した理由 ● Jenkins Slaveは、EC2にphpをインストールしてテストを実行していた。 ● 当然だがgolangコンテナが無いので、接続失敗でテストがコケる。 ● Jenkins Slave専用にECS Service建てるのは、もったいないよねー。 —> 開発環境用に作ったdocker-composeをJenkins Slaveの中に立ててしまおう!
Slide 11
Slide 11 text
第1の関門: git tokenの渡し方 Repository構成 ● docker: docker-compose.ymlなど ● app: PHPで書かれた本体 ● api: golangで書かれたマイクロサービス これまでは、Jenkinsにgithubのtokenとrepository pathを登録しておくと、手元に展開されていた。 Repositoryが3つだとScriptの所でgit cloneを3行書く。—> Permission Denied... あれ? どうやってtoken渡そう。—> .netrcに書くことで解決!
Slide 12
Slide 12 text
第2の関門: コンテナの建て方 ● 1つ目のテストは成功したが、別のテストで失敗。 ● コンテナが立てっぱなしだったので、ポートを取れなかった。 ● 80/tcp —> 8080/tcp(dockerのNginxが動くport)に透過させていたのが原因。 —> テストの開始時にdocker-compose up、終了時にdocker-compose downすることで解決。
Slide 13
Slide 13 text
第3の関門: コンテナの更新 ● しばらくうまく動いていたが、突然テストが失敗するように。 ● Jenkins Slaveでコンテナの更新を行なっていなかった。 ● テスト開始前にdocker-compose pullしたが上手くいかない。あれ? —> ecr loginしてなかったので、docker repos.にアクセスできていなかった。 loginすることで解決。
Slide 14
Slide 14 text
まとめ ● 一部のサービスをgolangで書き直してみた。 ● 今後PHPの部分はBFFっぽくなっていく予定。 ● PHPをコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!