Azure PipelinesでDocker Composeを使ってCIしてみた

 CIサービスを公私で三つ使っている。今回は私のほうでTravisCIのYAMLを書き換える必要が出てきたので、それを機にちとAzure Pipelinesへの乗り換え検討のための試行。

 まずPipelinesをGithub連携で使う準備、はリンクを置いて割愛する。
https://qiita.com/YuichiNukiyama/items/531fe3e83a7324faff23



 とりあえず動かしてみる。下記の二ファイル構成のプロジェクト。
azure-pipelines.docker.yml

pool:
vmImage: 'ubuntu-16.04'

steps:
- script: |
docker -v
docker version -f '{{.Server.Experimental}}'
docker-compose -v
docker login -u $(dockerId) -p $(dockerPw)
displayName: 'prepare'
- script: |
docker pull nginx:alpine
docker tag nginx:alpine matoba/nginx
displayName: 'build'
- script: |
docker-compose build
docker-compose up -d
displayName: 'run'
- script: |
curl --insecure https://127.0.0.1/
displayName: 'test'
- script: |
docker push matoba/nginx
displayName: 'push'


docker-compose.yml

version: '3.7'

services:
webapp:
image: matoba/nginx
proxy:
image: matoba/ssldevenv:cc
ports:
- "443:443"
environment:
- LINK_TO=webapp


CI中にDockerアカウントにログインしたいので、環境変数でそれを渡せるように設定しておく。


 Github連携をしておいてプッシュすると、CIが流れていく。


そしてDocker Hubへのプッシュが確認できた。




 とりあえず難なく動くのは確認できた。ここから検討をする。


 前提としてCI中にはDockerイメージのビルド、それとDocker Composeを使ってのアプリの起動とテスト、Dockerレジストリへのプッシュを行う。できれば一つのYAMLをいじるだけでシンプルに終えたい。あとOSSで、プルリクを受け付けている。
 プルリクを受け付けている状態でのCIの動作として、テストが済んだら自動デプロイというフローはまずい。プルリクなんてパブリックなリポジトリなら勝手に投げられるので、その結果物が自動デプロイされるようになっているのはまずい。今TravisCIでは環境変数を使ってプルリクに分岐をかけたり、リリースを行ってタグを判別してリリースを行ったりしている。まあこのあたりそこまで難しくなくて、TravisCIは便利。
 Azure Pipelinesではこれが劇的に便利に!となれば移行した。↑でTravisCIでやっていることは、Azure Pipelinesでは"script"の実行条件をいじらればということになる。
https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#script
 期待するオプションはなかったので、劇的に簡単になったりはしなさそう。ブランチとかプルリクのtrue or falseでのフィルタリングができればと思ったがなかった。でも"script"の粒度でそんな細かいことがやれてしまうと、ステージやジョブが分けられる意味が薄れてくるんだろうな。とりあえず次に新規でなにか作るときにまた使ってみるか。
comment: 0

Azure PipelinesでGithubプッシュによる自動ビルドを行うブランチを追加する

 AzureでCI/CDができるAzure Pipelinesが、OSS向けはけっこうよさげなリソースで無料利用可能との発表があったので早速触ってみた。既存のプロジェクトに、紹介ビデオを見ながら導入。
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/index?view=vsts

 やってみたのはいいんだけど、master以外のブランチでもGithubへのプッシュによる自動ビルド起動に手間がかかったのでメモ。

 ドキュメントに、「YAMLにtriggerを書かなければすべてのブランチで自動ビルド実行されるよ」と。されんかったぞ。triggerで対象ブランチを書いてもだめ。設定ページで「YAMLの設定をここでオーバーライドする」とあったのでそれを切ってもだめ。結局、設定ページで一つずつ対象ブランチを追加するしかなかった。


 そういうわけで設定ページまでの行き方を残す。とりあえずmasterブランチのビルドパイプラインは、ビデオに従った手順でできているとする。

 ”Edit”を選択


 ”Trigger”を選択し、branchフィルターでビルドを行いたいブランチを追加。


 以上で任意のブランチのGithubへのプッシュで、自動ビルドが走るようになる。

2018/11/21追記
branchフィルターにワイルドカードを入れれば、それで全ブランチ対応できることを確認。
comment: 0