1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azureで開発環境(オンプレDevOps)

Posted at

今回の資料
前回までの作業で、Azure SQL を利用し、AppServicesでWEBサーバの構築を行いました。

今回は、開発環境を考えてみたいと思います。
前回は、VSCから、直接 Azure の AppServices へアップロードしていました。
この開発環境だと、1人で丸抱えの大変な状況です。(小規模なら否定はしませんが)
これを、中~大規模に耐えられるように、開発環境を整えたいと思います。
Microsoftが買収した GitHub に依存する方法もありますが、Azure DevOps という CI/CD ツールを利用してみたいと思います。
クラウドサービスの DevOpsもありますが、VPN環境でも利用可能なように、オンプレの DevOps を利用してみたいと思います。

今回の準備
Windows 10 Pro を使います。
こちらに、Azure DevOps のオンプレ環境を用意します。
そして、Azure DevOps から、AppServices へデプロイします。

≪注意≫
Windows 10 Home 無理でした。(DevOpsのInstall不可です)Pro 必須。
もしくは、Windows 11 か、Windows Server が必要となるようでした。
(詳しくは、Copilotにでも御確認ください)
後、クラウドサービスとしても、DevOps(無料枠もあり)が用意されていますが、AppService へのデプロイは、Azure 側の設定が全く違うので、御注意下さい。( Public でクラウド DevOps を利用する方が、私は好きですが…)

環境構築(Azure Entra)
AppService へデプロイする為の権限付与のアプリ設定が必要です。
EntraIDの設定から、アプリを登録します。
image.png
シングルテナントで問題ありません。
image.png
アプリ登録が終わったら、シークレットの「値」の設定へ進みます。
image.png
「新しいクライアントシークレット」から登録を行います。
image.png
登録の際、附番される「値」を DevOps の設定で利用するので、コピーして保管しておきましょう。

環境構築(Azure AppService)
既に前回までに登録済なので、今回はデプロイができるように、設定変更だけ行います。
AppServiceを開き、「アクセス制御(IAM)」で「ロールの割り当ての追加」を行います。
image.png
選択するロールは、「特権管理者ロール」より、「共同作成者」を選択します。
image.png
メンバーには、EntraID で登録したアプリを設定します。
image.png
他の設定ポイントとして、「設定」⇒「構成」の中の「SCM基本認証」をONにします。
image.png

環境構築(DevOps)
セットアップには、SQLサーバが必要となりますが、最近はSQLサーバも使い方次第で無料枠を利用できるようです。今回も、無料枠で準備を進めます。
https://learn.microsoft.com/ja-jp/azure/devops/server/download/azuredevopsserver?view=azure-devops
こちらのURLより、DevOpsを取得し、インストール作業を進めます。
Expressであれば、制限はありますが、無料で利用できるようです。
image.png
再起動等の作業もありますが、「構成センター」が起動します。
image.png
余り悩む部分はありませんが、ポイントをいくつか。
Webサーバを立てることになるので、IISのようにポート設定が可能な感じです。
image.png
検索機能は面倒そうだった事もあり、準備しないというのも可能でした。
image.png
インストールを進めると、SQLサーバのインストールも行われます。
※外部接続不可の場合、SQLサーバをダウンロードする為のURLが提示されます
image.png

インストールが終了したら、「 http://localhost 」へアクセスして確認します。
プロジェクトの登録が、DevOpsでの最初の作業になります。
image.png
プロジェクトの作成が終わったら、プロジェクトの設定を行います。
画面左下にメニューがあります。
image.png
プロジェクト設定メニューの下の方に、「サービス接続」があるので設定画面を起動します。
image.png
「Azure Resource Manager」を選択して、次へ ⇒ サービスプリンシパル ⇒ 次へ
image.png
Azure サブスクリプションの ID と、名称を入力し、サービスプリンシパルIDには、EntraIDのアプリケーションIDを入力します。
image.png
下段にスクロールして、サービスプリンシパルのキーに、EntraIDのアプリに設定したシークレットで附番された「値」を設定し、テナントIDは、EntraIDのテナントを入力します。
「検証」ボタンをクリックして、「検証成功」と表示されればOKです。
image.png
「サービス接続名」を決定し保存します。

次に、プロジェクトの設定のうち、「エージェントプール」を設定します。
https://github.com/microsoft/azure-pipelines-agent/releases
このURLより、ダウンロードして解凍します。
「config.cmd」を、DOS窓で実行します。
image.png
色々設定できるようですが、デフォルトでも問題ありません。(例は全部デフォルトです)
DevOps から Azure へ、デプロイする際は、DOS窓で「run.cmd」を実行したままにしておきましょう。

環境構築(開発クライアントにGit)
DevOps 環境にプログラムをプッシュする必要があります。
DevOps で直接プログラム開発を行うことも可能ですが、ローカルでVSC等を利用した開発環境を想定しています。開発環境や使い方は、それぞれ諸事情があるでしょうし、Gitの利用が参考になれば幸いです。
https://git-scm.com/downloads/win
より、GIT をダウンロードしました。
実行可能な圧縮ファイルでしたので、実行して、そのまま解凍します。
環境変数「Path」に、解凍した「bin」フォルダを設定したら環境構築完了です。
dotnetで開発している場合、プロジェクトのルートディレクトリで、

コマンド
git init
git remote add origin http://localhost/DefaultCollection/プロジェクト名/_git/プロジェクト名
git config --global user.name "名前"
git config --global user.email "メールアドレス"
git add .
git commit -m "初回コミット等のコメント"
git branch  (ブランチの確認:masterの場合)
git push -u origin master

順にコマンド実行する事で、DevOps へプログラムをプッシュすることが可能です。

環境構築(DevOps)
パイプラインを作成していきます。
image.png
コード(プログラム)は、DevOps の Repos にあります。
image.png
DevOps に登録したプロジェクトを選択します。
image.png
スタートパイプラインで構成します。
image.png
Yamlの作成が必要です。以下で作成します。

azure-pipelines1.yml
trigger:
- master  ← DevOpsのブランチを指定します

pool:
  name: 'Default'  ← DevOpsのエージェントプール名です

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: 'AzureEntraApi'  ← DevOpsのサービス接続名です
    appType: 'webApp'
    appName: 'AzureのAppServiceの名前'
    package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

「保存して実行」のボタンで正常に処理されれば完了です。
「trigger:」でブランチを指定しており、ブランチ内に更新があると、そのまま Azure へデプロイされますが、「trigger: none」と変更する事で、手動でパイプラインを実行する事でのみ、デプロイする処理に、変更することが可能です。

又、以下のYamlでは、ローカルのiisフォルダへ発行が可能です。この場合、DevOpsがフォルダへ更新できる権限を要する必要があるので、コピー先となるフォルダ権限は見直しが必要です。

azure-pipelines1.yml
trigger: none
pool:
  name: default
steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration Release /p:PublishDir=$(Build.ArtifactStagingDirectory)\PublishedApp'
- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Build.ArtifactStagingDirectory)\PublishedApp'
    Contents: '**'
    TargetFolder: 'C:\inetpub\wwwroot\test'
    OverWrite: true

最後に
一人でシステム構築をやりきる…(やりきれる…) これは、重要、かつ、貴重なスキルですが、そのシステムは3年後、稼働していますか?
あなたが健康で、今の仕事を継続できている保証はありますか? 無責任なシステムを、世に生み出していませんか?
ジジィ的には、次の世代に引き継ぐために、このような知識は必須なわけで、今も備忘の為、このような記事を残している次第です。
以上、お疲れさまでした~。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?