16
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

初心者の初心者による初心者のためのAzure DevOps

この文章が対象としている人

あなたはCI/CDについて1時間程度の座学をすでにこなしている。そしてある日会社にいったら、いきなり、上司が"うちでもCI/CDやってみようよ、よろしくね!"と丸投げされた。さらに"とりあえず一週間後くらいになんか動くの見せて"と追い打ちを掛けられた。ここであなたがとるべき道筋について提案する。

会社の状況

まず現在の会社の現状を分析すると、以下のような状況である。

  • レポジトリは利用している。ただし開発プロジェクトでレポジトリをみんなで使って、ソースを共有しているというよりはとりあえず一か所に集めておく場所である。
  • CI/CDについてはまだ何も利用していない。
  • インテグレーションとデプロイメントには一回当たり3~7日ほどかかっている。
  • Azureの各種サービスを利用しているのでこれをうまく活用したい。

分析

DevOpsは概念を理解するはそれほど難しくない。また考え方としても開発、インテグレーション、デプロイメントに苦労している人であるならば、誰もが採用したい!といえる手法である。

しかし実際には採用するにあたっては多大なる苦労が予想できる。その一例としては以下がある。

  • ステークホルダーが開発チーム、テストチーム、デプロイチーム、運用チーム、インフラチームと多岐にわたりなかなか同意が取れない。総論賛成各論反対といった状況に陥りやすい。
  • CD/CIにおけるツールも各種あり、長所短所がある。このツールの選定、使い方の理解にもかなり時間がかかる。
  • CI/CDの入力はレポジトリである。このレポジトリを使いこなせば、確かに効率は上がる。しかし学習コストがチーム全体に及ぶために導入に二の足を踏む傾向がある。
  • また出力はWebアプリケーションサーバー、コンテナなどがある。これらの運用もなかなか厄介である。

このような背景を考えると、CI/CDについてはじめて一気通貫でビルド~デプロイするのはなかなか手間がかかる。いうならば、初めての開発環境をそろえるときに本の通りにやってみたが、出てこないはずのエラーが山のよう現れて挫折するようなものである。

はじめてCI/CDに手を触れた人があまり苦しまずにとりあえずCI/CDを一気通貫で実施できればこれは大きな自信になるといえる。しかし、以下のような事象が発生してなかなか進まないといったケースがある。

  • サンプルとなる適切なプロジェクトがない。複雑すぎるとインテグレーションでエラーが出るし、簡単すぎると次のステップに進むのが難しい。
  • デプロイ先が面倒くさい。AWS, GCP, Herokuなどいろいろあるが、とりあえずコマンドを打っているだけにもかかわらず、うまくいかないケースがある。
  • CI/CDパイプラインでよくわからないエラーが発生する。

最初の半日で実施すべきこと

まずやらなければならないことはとにかく"動くものである"。インターネット上を探せばよい教材はたくさんある。Udemyなどもおすすめである。しかしAzureに特化しているのであればMicrosoftが提供しているMicrosoft Learnはかなりお勧めである。

コースはいくつもあるが、Devopsについてとるべき教材は2つ。その名もずばり”Azure DevOps を使用してアプリケーションをビルドする”"Azure DevOps でアプリケーションをデプロイする"である。

ただしこのコースを最初のコースは6モジュール、2番目のコースは9モジュールから成り立ち全部こなすとコース時間としても15時間。実質は3日以上かかる。しかし心配することはない。さらにモジュールはチャプターに分かれているが、これを全部実行する必要はない。必要な部分だけ実施すれば、とりあえず上司に見せられるものを構築できる。

しかも最初のレポジトリから、Azure App Service(要するにAzure上で動いているWebサービスであり、インターネット上でアクセスできる環境)にデプロイするところまでを含んでいる。

実際にモジュールの評価数を見てみると、モジュール1はそれぞれ評価数4961と1060(2020/12/9現在)となっており、それぞれのコースの中でも圧倒的に多い評価数となっている。

現在このコースは英語での提供となっている。そこでそれぞれのモジュールについて最低限度ではあるが、ポイントを押さえてみたい。

Azure DevOps を使用してアプリケーションをビルドする

コースURLはこちらになる。このURLを開くと、コースに含まれているモジュールが表示される。

実施するモジュールは以下の"Create a build pipeline with Azure Pipelines"である。

image.png

モジュールは以下のようなチャプターに分かれている。

  1. Introduction
  2. What is Azure Pipelines?
  3. Exercise - Get the sample application
  4. Plan your build tasks
  5. Exercise - Set up your Azure DevOps environment
  6. Exercise - Create the pipe line
  7. Exercise - Publish the result to the pipeline
  8. Exercise - Build multiple configurations by using templates
  9. Exercise - Clean up your Azure DevOps environment.
  10. Summary

実施するのはExercise - Publish the result to the pipelineまでで十分である。

Introduction

必要時間(およそ):読むのに1分、環境設定で一時間

このページのポイントは必要な要件であり、以下のものはそろえておく。

Azure DevOps organizationについてはフリーアカウントで構わない。

What is Azure Pipelines?

必要時間(およそ):読むのに5分

このページではAzure Pipelinesについて説明をしている。

CI/CDについて基礎を理解しているならば、下記の図を見て、AzureにおけるCIの用語を理解おけば十分である。重要なのは、Pipelineへの入力はCode, Pipelineの一連の処理はTask、そしてPipelineからの出力はArtifactと呼ばれていることである。

A hand-drawn illustration of a CI pipeline

Exercise - Get the sample application

必要時間(およそ):読むのに5分、実行に15分

このチャプターではサンプルアプリケーションをローカル環境にインストールしてVisual Studio Code上で動かすようにする。

GitHubで自分のアカウントにサンプルソースコードのリポジトリを作成

前提条件

手順

  • GitHubにログインしたらmslearn-tailspin-spacegame-webを開く。

  • Forkして自分のリポジトリにソースを持ってくる。
    image-20201209120742815.png

  • Forkができたら自分のリポジトリのURLをコピーする。
    image.png

ローカル環境にGitHubのレポジトリをクローン

前提条件

手順

  • Visual Studio Codeをソースコードを置きたいディレクトリで開く。

  • ターミナルを開く。

  • 以下のコマンドを打っていく。

   git clone https://github.com/[YOUR REPOSITORY!]/mslearn-tailspin-spacegame-web-deploy.git
   cd mslearn-tailspin-spacegame-web-deploy
   git remote -v
   git remote add upstream https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git
   git remote -v

ローカル環境にでビルド&実行

必要時間(およそ):読むのに2分、実行に10分

前提条件

手順

  • 上記で開いているターミナルから処理を続ける。

  • ビルドする

   dotnet build --configuration Release
  • 実行する。
   dotnet run --configuration Release --no-build --project Tailspin.SpaceGame.Web
  • 画面に表示されたURLを開く

2020-12-09_12h36_36.png

image-20201209123800158.png

Plan your build tasks

必要時間(およそ):読むのに2分

この章では実務に入った時にどのようにビルドタスクをデザインするかを説明している。今の段階ではあまり気にする必要はない。

Exercise - Set up your Azure DevOps environment

必要時間(およそ):読むのに2分、実行に10分

前提条件

さてこのチャプターではAzure上でDevOpsの環境を整えていく。とりあえず重要なことは、Azure DevOpsの"組織"を作成しておくことである。Azure DevOpsの"組織"を作成しておくことが重要である。大事なので2回繰り返した。

このコースの素晴らしいところは、すでにテンプレートが用意されていて、モジュールを進めるためにはそのテンプレートを組織にコピーすれば必要なプロジェクトが生成されるという点である。

手順

2020-12-09_12h53_12.png

  • プロジェクトを作成する。
    image-20201209125421237.png

  • プロジェクトへ移動する。
    image-20201209125500465.png

Exercise - Create the pipe line

必要時間(およそ):読むのに2分、実行に15分

このステップではPipelineを作成する。GitHubのソースをPipelineの入力として指定する。このチャプターではビルドスクリプトを修正しながら、2回ビルドを実施する。一回目はAzure DevOps上で直接実行するが、次はVisual Studio Code上からの実行となる。

一回目のビルド(Create the Pipeline~Watch the pipeline run)

前提条件

  • 前のステップが完了していること

手順
* Pipelines->Pipelines->Create Pipe Lineをクリックする。
2020-12-09_14h35_48.png

  • ConnectタブではGitHubを選択。自分のリポジトリを指定する。
    このステップによりGitHubのレポジトリがPipelineの入力としてして紐づけられる。
    image.png

  • ConfigureではASP.NET Coreを選択
    image.png

  • Save & Run
    image.png

  • 結果の確認
    Pipelinesの結果に緑のチェックボックスが出ていれば成功である!!!これで初めてのビルドが成功した。
    image.png

二回目のビルド(Add the build tasks~)

前提条件

  • 前のステップが完了していること

手順

  • Visual Studio Codeでターミナルを開き、ソースが置いてあるディレクトリに移動する。
    image.png

  • 以下のコマンドを入力してソースを最新にする。

   git pull origin master
   git checkout -b build-pipeline
  • azure-pipelines.ymlを修正する。
    これはソースをコピペすればよい。

  • 以下のコマンドを入力してpushする。

   git add azure-pipelines.yml
   git commit -m "Add build tasks"
   git push origin build-pipeline
  • このレポジトリはすでにAzure DevOpsとつながっているので、pushと同時にビルドタスクが動くのがわかる。

image.png

Exercise - Publish the result to the pipeline

必要時間(およそ):読むのに2分、実行に5分

さてここまででくれば、ビルドをサーバー、ローカルともに実践できている。しかし物足りなく感じるのではないだろうか?ビルドした結果はどうなっているのか?これがなければ、いまいち現実感がない。
最後のチャプターではビルドした結果を取得する。

前提条件

  • 前のステップが完了していること

手順
* azure-pipelines.ymlをコピペ。
* 以下のコマンドを入力し、GitHubにpush

git add azure-pipelines.yml
git commit -m "Add publish tasks"
git push origin build-pipeline
  • ビルドが完了したらサマリーページに移動して"Published"をクリックする。
    image.png

  • Artifactページに移動するので、フォルダを移動すると、zipができているのが確認できる。
    image.png

モジュール8移行については応用、クリーンアップ、サマリにつき割愛する。

Azure DevOps を使用してアプリケーションをビルドする、の総括

このトレーニングでは以下を実施した。

  • GitHubのローカル環境構築
  • Pipelineの構築
  • PipelineとGitHubレポジトリの連携
  • Azure DevOps上でのビルド
  • ローカル環境からのCommitをトリガーとするビルド
  • PipelineからのArtifact生成

これだけでも初めてのDevOpsとしては十分であるが、次のコースでは、実際にAzure Webサービス上で動いているサーバーのデプロイまでを実施する。

Azure DevOps でアプリケーションをデプロイする

コースURLはこちらになる。

実施するモジュールはCreate a release pipeline in Azure Pipelinesである。

モジュールは以下のように分かれているが、実際に実行するのは、"Exercise - Deploy the web application to Azure App Service"までで十分である。

  • Introduction
  • What is continuous delivery?
  • Plan a release pipeline by using Azure Pipelines
  • Exercise - Set up your environment
  • Exercise - Deploy the web application to Azure App Service
  • Exercise - Monitor the health of your pipeline
  • Plan the tasks for the upcoming sprint
  • Exercise - Clean up your environment
  • Summary

Introduction

必要時間(およそ):読むのに1分、環境設定で10分

新たに用意するのは一つだけである。
- An Azure subscription

下記はすでにビルドのモジュールで用意されている。
- An Azure DevOps organization
- A GitHub account
- Visual Studio Code
- .NET Core 3.1 SDK
- Git

What is continuous delivery?

必要時間(およそ):読むのに2分
CDについて概要を説明している。飛ばしても構わない。

Plan a release pipeline by using Azure Pipelines

必要時間(およそ):読むのに5分

The Plan

ここで重要なのは上記の図を理解しながら、作業を以降の作業を進めることである。このステップで完全に理解する必要はない。作業を進めながら、何をやっているかわからなくなったら、図に戻ってくればよい。

Exercise - Set up your environment

必要時間(およそ):読むのに1分、環境設定で20分

プロジェクトの生成

ここではテンプレートから新しいDevOpsプロジェクトを作成する。重要なことは、ビルドと似ているが異なるプロジェクトテンプレートである。新たに生成する必要がある。

テンプレートはこちらのリンクから作成できる。

image.png

テンプレート作成の詳細についてはすでに実施しているので割愛する。

ローカル環境の構築

ローカル環境を構築する。対象となるレポジトリはMicrosoftDocs/mslearn-tailspin-spacegame-web-deployである。こちらを自分のアカウントにforkする。

forkしたらVisual Studio Codeのターミナルから下記のコマンドを入力してローカルにクローンする。

cd [Location you want to clone]
git clone https://github.com/[your account]/mslearn-tailspin-spacegame-web-deploy.git
cd mslearn-tailspin-spacegame-web-deploy
git remote add upstream https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git

パイプラインの構築

テンプレートにはすでにパイプラインが生成されている。
image.png

さらにこのパイプラインはプロジェクトをテンプレートから生成したときにGitHubにforkされたリポジトリと紐づいている。

Visual Code Stuidoのターミナルから入力して、ブランチを切り替える。

git fetch upstream release-pipeline
git checkout -b release-pipeline upstream/release-pipeline

さらにコミットをしてpushするとパイプラインが動き出す。

git commit --allow-empty -m "Trigger the pipeline"
git push origin release-pipeline

image.png

サマリーを確認すると、publishされていることがわかる。
image.png

クリックしてArtifactを確認するとzipが生成されている。

image.png

さてここまでは前回でも実施した内容と同じである。このモジュールではさらにArtifactを実際のAppサービスにデプロイする。

Exercise - Deploy the web application to Azure App Service

必要時間(およそ):読むのに1分、環境設定で60分

前のチャプターまでで、デプロイの準備は完了した。このチャプターからはArtifactを実際のAzure上のAppサービス上にデプロイする。

ビルドとデプロイを通したモジュールで最も大変なのがこのステップである。しかしこれを完了すれば、GitHub→ビルド→デプロイ→Azure Appサービスと、基本となるCI/CDが構築できる。

Create the App Service instance

このステップではデプロイ先のAzure Appサービスを設定する。Azure Appサービスはインターネット上でだれもがアクセスできるアプリケーションサーバーを構築する。

前提条件

  • Azure Account

手順

  • Azure Portalへログインする。
  • Azure Appサービスを開く image.png
  • 追加を選択 image.png
  • 手順書に記載されたパラメターに従ってAppサービスを生成する。 image.png
  • リソースに移動する。 image.png
  • URLをクリックしてAppサービスが正しく生成されていることを確認する。 image.png

image.png

以上でデプロイ先となるAppサービスを作成できた。もちろん今は空の状態である。次のステップからこのAppサービスにデプロイするための設定をする。

Create a service connection

現時点ではパイプラインとAzure Appサービスは紐づいていないのでデプロイできない。まずはプロジェクトの設定→サービスコネクションでAppサービスを紐づける。
image.png

手順

  • Project Setting→Service Connections→New Service Connectionを開く image.png
  • Azure Resource Managerを選択し、Nextをクリックする。 image.png
  • Service Principal(automatic)を選択し、Nextをクリックする。 image.png
  • 手順書に従ってパラメータを入力する。Azureへのサインイン画面が出てきた場合にはユーザー名とパスワードを入力する。 image.png
  • Service Connectionsで生成されていることを確認する。 image.png

Add the Build stage to the pipeline

さて上記でPipelineとAppサービスが紐づいたので、実際にビルドした結果をAppサービスにデプロイする。デプロイはVisual Studio Codeから実施する。

ビルドをデプロイするためにはステージが複数必要になる。まずビルドを一つのステージにまとめる。

手順
* Visual Studio Codeからazure-pipelines.ymlを開く。
* 手順書からazure-pipelines.ymlをコピぺする。
* 下記のコマンドを実行する。

git add azure-pipelines.yml
git commit -m "Add a build stage to the pipeline"
git push origin release-pipeline

Store your web app name in a pipeline variable

上記で変更した結果、デプロイ先は環境変数$(WebAppName)で指定している。
そのためにPipelineで環境変数にデプロイ先のAppサービス名を指定する。

            inputs:
              azureSubscription: 'Resource Manager - Tailspin - Space Game'
              appName: '$(WebAppName)'

手順

  • Pipelines->Library->+Variable Groupをクリックする。
    image.png

  • 手順書に従ってパラメータを設定し、Saveをクリックする。
    image.png

Add the deployment stage to the pipeline

ここまででデプロイの準備が整った。

手順

  • 手順書のazure-pipelines.ymlをコピペする。新しいazure-pipelines.ymlではDeployステージが追加されている。 2020-12-09_22h21_28.png
  • ターミナルから下記のコマンドを入力してPipelineを起動する。
git add azure-pipelines.yml
git commit -m "Add a deployment stage to the pipeline"
git push origin release-pipeline
  • Pipelineが完了したら、AppサービスのURLにアクセスすると、Space Gameがデプロイされることがわかる。 image.png

Azure DevOps でアプリケーションをデプロイする、の総括

このトレーニングでは以下を実施した。

  • GitHubのローカル環境構築
  • Pipelineの構築
  • Appサービスの構築
  • PipelineとAppサービスの連携
  • 環境変数の設定
  • ローカル環境からのCommitからビルドおよびデプロイ

総括

さてつらつらとコースのポイントについて押さえてみた。おそらく朝9時から実施すれば、お昼過ぎにはここまで来ている。上司にも見せられるし、構築した環境をさらにいじって知識を広げることもできる。

ようこそAzure DevOpsの世界へ!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?