きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

Azure DevOps × CI/CD × Visual StudioからAzure Container RegistryにPushするPiplineを作ってみた

この記事の目的

この記事では、
Azure DevOpsでCDの設定をした時のまとめ
を目的としています。


本題

★やりたいこと概要

「CI/CD」のことはじめとして、①「Visual Studio からGitサーバーにPushした」とき、「②サーバー側でソリューションをビルド」し、「③DockerfileをつかってDockerImageもビルド」し、「④Azure Container RegistryにPush」するところまでをAzure DevOpsを使ってやってみたいと思います!
いろいろな発表や資料をみて、やれることはわかっているつもりなのですが、実際にどうやってやるかわかっていないので、整理しつつやり方を学んでいこうと思います。この仕組みがうまく身についたら、個人的に開発しているプレゼンテーションアプリをCI/CDしてあげたいと思いますw



★DevOpsでプロジェクトを作成

まずは、プロジェクトを作成します。プロジェクトは、Organization配下に20?くらい作れるそうです。Organizationを作ってないよという時は、図の左下の方の「New Organization」から作成する必要があります。

f:id:kinakomotitti:20181209215202p:plain
プロジェクト作成するの図

「Create」ボタンを押下し、しばらくするとプロジェクトが完成します。

f:id:kinakomotitti:20181209215457p:plain
プロジェクトが完成したの図

★Reposの設定

Azure DevOpsのReposにASP.NET Core のMVCテンプレートをPushしていきます。基本的には、GitHubと同じような操作になります。前にまとめておいたのが役に立ちそうですw
www.kinakomotitti.net

ReposのURLは以下のように取得することができます。

f:id:kinakomotitti:20181209215919p:plain
ReposのURLを取得するの図

作成したプロジェクトは以下のような設定です。図中で、ソリューションのフォルダを作成するのチェックボックスをあえて外しているのは、ただの趣味です。この後の作業に何も影響ないので、チェックしたままでもよいはずです。

f:id:kinakomotitti:20181209221112p:plain
作成したプロジェクトの設定の図

プロジェクトが正しくPushできると以下のようになります。

f:id:kinakomotitti:20181209221357p:plain
Pushできたぜ・・・の図


★Piplineの設定

いよいよ、Build Piplineの設定を行っていきます。

f:id:kinakomotitti:20181209221729p:plain
Build Piplineの作成その1の図

f:id:kinakomotitti:20181209223016p:plain
Build Piplineの作成その2の図

f:id:kinakomotitti:20181209232425p:plain
Build Piplineの作成その3の図


注意点その1:COPY failed: stat /var/lib/docker/tmp/docker-builder936381234/WebApi/WebApi.csproj: no such file or directoryt 的なエラーが発生する。
→Docker Contextオプションがデフォルトのままになっているためのエラー。
 設定を変更し、任意のパスを指定する必要がある。
stackoverflow.com



  注意点その2:Image名はBuild時とPush時で同じ名前になるように定義する。
  →当たり前ですが、BuildしたときのImage名と、PushするときのImage名の定義をそろえておかないと、Pushに失敗します。特に、任意のImage名の定義をする場合に注意です。自分はここで失敗しました。

ここまでの設定がうまく完了すると、Piplineを開始(Queue)すると、Azure のContainer RegistryにImageがPushされます!



★CIの有効化と実行

いよいよCI?を実行していきます。CIを実行するためにも、CIを有効化する必要があります。

f:id:kinakomotitti:20181209230722p:plain
CI有効化の図

ここまでで、各種設定は一通り完了です。動作確認のため、Visual Studio でコードをちょっと修正して、コミット→Pushまでを実行します。すると、Azure DevOpsのBuildsページにて、先ほど設定したBuildタスクが実行されていることが確認できます。

f:id:kinakomotitti:20181209230955p:plain
こんな感じの図



まとめ

今回は、Docker Containerテンプレートを使って、Azure Container RegistryにPushするところまでのCI設定手順をまとめました。まだ、テストとか、K8sへのデプロイとかいろいろやりたいことが残っているので、継続的に調査を進めていこうと思います(/・ω・)/









(´▽`)そういえば、サーバーでのビルドやってない気がする・・・