1rep - 3分でできるAzure DevOps Azure Pipelines編 ~

色々やってる[Marcy](https://twitter.com/MarcyWorkOut)です。

### Azure DevOpsとは
***「最新の一連の開発サービスを利用して、よりスマートに計画を立て、より効率的に共同作業を行い、より迅速に公開しましょう。」***
(Github + Zenhub + 開発グループウェア + circleci が一つになったような感じです。)

公式サイト引用：https://azure.microsoft.com/ja-jp/services/devops/https://azure.microsoft.com/ja-jp/services/devops/

その中でも、Azure Pipelines(CI/CD)とDockerfileを使い簡単に、ビルドを自動化してみましょう。
（類似するサービスで、circleci codeshipなどがあります。）


``` text
CI/CDとは?
継続的インティグレーション／継続的デリバリーを示し、開発に自動化を取り入れ、
バグなどの早期発見および自動デプロイなどを行う。

利用シーン：
例）
ファイルをDockerで作成し変更したファイルをfeatureブランチにプッシュし自動で
ビルドとテストコードが実行されコードが変更されるたびに行われる。
何も問題がなければそのままデプロイされる
```

百聞はなんとかなので手順を
利用するにはアカウント登録が必要です。[こちらから登録](https://azure.microsoft.com/ja-jp/services/devops/)）

<iframe width="560" height="315" src="https://www.youtube.com/embed/2HkzDMyLwEc?list=PLdZSaJc2CNA15Ql1IL1sR8-DcXmg9dtF3" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### 1.Azure Reposにソースコードをアップする
中身はNginx + golangのDockerfileになっています。
![Azure Reposにソースコードをアップする](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711310/picture_pc_113adddfbbcdbc4c352535414dc1dced.jpg)


### 2.左のバーからPipelinesを選択しPipelineNew Pipelineをクリック
![左のバーからPipelinesを選択しPipelineNew Pipelineをクリック](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711339/picture_pc_614d6a7d2937522bcce62f23fa4569fc.jpg)

### 3.CIするリポジトリを選択
![CIするリポジトリを選択](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711360/picture_pc_daf62535691650f2adcd67b968b8a727.jpg)

### 4.CIするプロジェクトファイルを選択
![CIするプロジェクトファイルを選択](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711369/picture_pc_598b6b45a570d8ab1a98e2cedc5a5945.jpg)

### 5.Docker imageを選択
![Docker imageを選択](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711388/picture_pc_71bb3fa5ec9808fe4b9f5337218ac14e.jpg)

ファイルを自動で識別してくれます。

### 6.CIの設定
![CIの設定](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711396/picture_pc_c51a53fd16131a201fef06b669962cc6.jpg)

***azure-pipelines.yml***
imageNameは任意で自由に（プロダクト名に合った名前がベストかと）scriptの 
```
docker build -f Dockerfile -t $(imageName)
```
の***Dockerfile***の部分はリポジトリにおいてあるDockerfileのパスに合わせてください。
今回自分のリポジトリに合わせて下記の設定にしております。

```
# Docker image
# Build a Docker image to deploy, run, or push to a container registry.
# Add steps that use Docker Compose, tag images, push to a registry, run an image, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
pool:
 vmImage: 'Ubuntu 16.04'
variables:
 imageName: 'golangapp:$(build.buildId)'
steps:
- script: docker build -f .docker/golang/Dockerfile -t $(imageName) .
 displayName: 'docker build'
```

### 7.CI設定ファイルを保存
![CI設定ファイルを保存](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711446/picture_pc_b9c6c32eec0f90c146fb53d79fed2e24.jpg)

Commit directiy to the branchを今回選択していますが、CIを設定したいブランチへ作ることも可能です。そのまま Save and Run!

### 8.CI実行
![CI実行](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711485/picture_pc_c4f6c27a6eafb66c0985fd7a66422a2c.jpg)

![CI実行](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711497/picture_pc_7ed342f46981ac2ff3d7cad0703d4e05.jpg)

![CI実行](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711641/picture_pc_bf5838370fb92a1de504fc3ba789f82e.jpg)
完了すると上記の画面が表示されます。

### 9.ファイルを変更しmasterブランチにコミット
![ファイルを変更しmasterブランチにコミット](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711704/picture_pc_9c4330f653642b2510a5f044273b6a6c.jpg)

***azure-pipelines.yml*** にを選択しimageNameの部分だけ変えてコミットしてみましょう。

![ファイルを変更しmasterブランチにコミット](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711725/picture_pc_da76b95f76769856f7b0e4c40cab1fd0.jpg)

変更したらコミットしてPipelines戻ってみましょう。

### 10.変更したコミットファイルの自動実行
![変更したコミットファイルの自動実行](https://d2l930y2yx77uc.cloudfront.net/production/uploads/images/8711742/picture_pc_b257c70c2b4588130714e2ca00954e38.jpg)

先ほどの***azure-pipelines.yml*** を変更したファイルがコミットされるとPipelinesで実行されます。
***azure-pipelines.yml***があるブランチでコミットされたら実行されるのでmasterブランチでなくとも実行されます。


### Azure DevOps Azure Pipelines
Pipelinesは10個の無料並列ジョブをサポートされており、先に使っている人をまたずテストが可能です。
***（待たなくていいのがいいですね！）***

コンテナ開発が主流になっているのでCI/CDを楽にできテストが完了したものをAzure側のKubernetesですぐに使ったり開発環境がとても楽になるのでかなり重宝するかと思います。

#### 蛇の足
昨今クラウドと呼ばれる環境がもてはやされている中、クラウドを主流に扱えるインフラエンジニアの数はものすごく少なく皆人材を求めています。

ですが、専任のインフラエンジアでなくてもクラウドを扱えるよう様々な工夫がなされております。（PaaSすげぇ.....）

参考事例）
***[【CEDEC2018】Azure最新情報＋「オトギフロンティア」運用大公開＋サーバーレスアーキテクチャー)](https://www.slideshare.net/dmasubuchi/cedec2018microsoft-azure-part2-dmm-111422315)***


今からインフラ専任で食っていく！というよりも少し開発に携わりつつインフラもやるがベターかもしれません。
（AGMAのクラウドに就職・転職するのであれば専任でいいかもです。）


[Marcy Twitter](https://twitter.com/MarcyWorkOut)