LoginSignup
1
1

More than 3 years have passed since last update.

Azure Kubernetes Service(AKS) × Azure DevOpsでモダンなCI/CD環境を構築してみた

Posted at

はじめに

CI/CDの定番ツールと言えば個人的にCircleCIとGitHubだと思うんですが、Azureサービスで楽々にCI/CD環境を構築したのでまとめてみました。ソースコードとか詳細な手順は掲載していないの悪しからず。

目次

  • 構成図
  • AKSクラスターとプライベートレジストリの構築
  • AzureDevOpsでプロジェクト作成
  • azure-pipeline.ymlにビルド・テストコマンドを記述
  • Deployの設定
  • git push で動作確認
  • おわりに

構成図

構成図はこんな感じです。

スクリーンショット 2019-08-24 17.55.57.png

AKSクラスターとプライベートレジストリの構築

AKSクラスタとContainer Registryを作成しAKSからregistryにアクセスできるようにします。これは以下の公式ドキュメントを参考にしました。
AKSクラスタの作成
ACRの作成
AKSとACRの連携

AzureDevOpsでプロジェクト作成

ポータルからAzure DevOpsを検索し、プロジェクトを作成しました。Azure DevOpsをはじめて利用する場合は組織を作成する必要があります。ちなみにWEB UIはこんな感じです。
スクリーンショット 2019-08-24 18.09.56.png
この画面からパイプラインの作成やら、開発メンバーの追加が行えます。開発から本番環境まで全てAzureのサービスを使うといった場合、Azure DevOpsはおすすめです。

azure-pipeline.ymlにビルド・テストコマンドを記述

Azure Reposから新しいリポジトリを作成し、サンプルのソースコードをpushしました。Azure Pipilines > Buildで新しいビルドバイプラインを作成します。GitプロバイダーはAzure Repos以外にもGitHub、Bitbucket等を選択できます。ビルドのテンプレートは豊富な言語・プラットフォームから選択できます。ここではJavaのSpring Bootを使用したのでmavenを選択します。バイプラインを作成すると、ソースコードリポジトリのルートにazure-pipelines.ymlという名前のファイルが作成されます。今回はこんな感じで記述しました。

azure-pipelines.yml
# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/java

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  dockerId: matsucon
  backendImageName: springapp

steps:
- script: |
    echo Starting Build
    mvn install -DskipTests=true
  displayName: 'ビルドを実行しています'
- script: |
    echo Starting UnitTest
    mvn test
  displayName: 'テストを実行しています'
- script: |
    docker build -t $(dockerId).azurecr.io/$(backendImageName) --no-cache .
    docker login -u $(dockerId) -p $(dockerLoginPassword) $(dockerId).azurecr.io
    docker push $(dockerId).azurecr.io/$(backendImageName)
  displayName: 'イメージをビルドしてレジストリにpushしています'

CircleCIなどのCIツール利用したことのある方はおなじみの記法だと思います。コンテナレジストリのパスワードなどの機密情報は環境変数としてWEB UIから設定できます。公式リファレンスを参考にしています。

Deployの設定

次にデプロイの定義をしていきます。azure-pipelines.ymlにCI定義まで記述したんだからデプロイの定義も同じファイルに書かせてくれよと思ったのですが、そこは目をつむって先に進みます。
Pipelines > Releasesからデプロイの詳細を設定していきます。デプロイ設定はドキュメントがあまりなく、WEB UIをあちこちいじりながら設定していきました。うまくいくとこんな感じになります。
スクリーンショット 2019-08-24 19.04.35.png
ビルドの終了をトリガーにして、kubectl apply deployでアプリのデプロイ、kubectl apply serviceでアプリを外部に公開しています。

git push で動作確認

SpringBootで書かれたpush前のコードは以下のようになっています。

Example.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "<h1>hello World</h1> \n <h2>sample app</h2>";
    }

    static int calc(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        SpringApplication.run(Example.class, args);
    }

}

h1タグのhello Worldをこんにちは世界に変えてpushしてみます。

Azure Pipelinesを見てみるとビルドが走っていることが確認出来ます。
スクリーンショット 2019-08-24 19.07.20.png

kubectl get svcで公開されているサービスのIPを調べてブラウザで表示してみます。
スクリーンショット 2019-08-24 20.12.30.png
AKSへのデプロイもうまくいってるみたいです。

おわりに

CI/CDパイプラインを誰でも簡単に(?)構築できてしまうAzureDevOpsですが、デプロイのところでは直感的に扱うのが難しいなというのが第一印象でした。ただ、Azureユーザーなら使いなれたサービスでCI/CDパイプラインを構築できてお手軽なので気になる方はぜひ試してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1