LoginSignup
3
2

More than 3 years have passed since last update.

AzureDevOpsで.Net WebAppをWindowsServer IISへリリースするpipelineを作成する

Posted at

目的

AzureDevOpsで.Net+IISなプロジェクトのCI/CDしたい

前提・対象者

  • IIS上のサイト設定済、設定出来る
  • VisualStudioの発行でも何でも良いのでサイトが動作するのは確認してる
  • AzureDevOps内にプロジェクトがある、gitも設定済
  • あとはpiplineの設定だけしたい!という状態

動作確認環境

AzureVM WindowsServer2016
IIS10.0
.NetCore2.2(Frameworkでも良いよ)

実際の手順

参考 というかぶっちゃけほぼこれ

WindowsServerをdeployグループに登録

DevOpsから配置先を操作できるようにエージェント登録してやる必要があります

AzureDevOpsからPipelines>Deployment groups
「+New」をクリックし適当な名前を入力して「Create」

Items.png

右にパワーシェル用のいろいろが表示されるのでまずはType of target to registerがWindowsな事を確認
そんで右下の「Use a personal access token ~」にチェックしコピーします
Items (1).png

WindowsServerにログインし、管理者権限でパワーシェルを開きコピーしたシェルを実行
途中、エージェントタグの構成、アカウントの入力を求められますが何も押さずEnter

実行完了したら「C:\azagent\A1」みたいなフォルダが出来ます、だから管理者権限で実行する必要があったんですね
AzureDevOpsのDeployment groupsに戻ると「TargetStatus」がOnlineになってちゃんと見えてる事が確認できます
Items (2).png

groupsという名前が示す通り複数登録して一斉配信するような使い方が出来ます、が今回はとりあえず一台で

未検証
ホワイトリストなセキュリティを設定してて繋がんねぇってなるときは以下を参考にすると良いのかな
https://docs.microsoft.com/ja-jp/azure/devops/organizations/security/faq-network-connections?view=azure-devops
「Azure DevOps IP check page. 」なんてのも紹介されてたので使うと良いかも
https://devblogs.microsoft.com/devops/new-ip-firewall-rules-for-azure-devops/

ビルドpipelineを作る

AzureDevOpsからPipelines>Builds
「+New」>NewBuildPipelineをして対象のgit,repositoryと選択
Configureで.NetCoreを選びます
yamlが自動生成されます
Items (3).png

pool:vmimageがビルド環境です.NetFrameworkの場合windowsの環境が選べるので選びましょう
以下のように色々選べます
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops#use-a-microsoft-hosted-agent

triggerはトリガーです
タグ名とか細かく指定できますが、そこは運用に応じて各々で調べてもらって…今回はブランチだけ

SaveしてRunしてみましょう
ちゃんと成功すればおっけーです

リリースPipelinesを作る…前に

ビルドしただけではまだ不十分

Artifactsという資材として利用可能な状態へ発行してやる必要があります
Buildに戻り先ほど作ったyamlを以下のようにします(vmimageは任意で)

azue-pipelines.yaml
trigger:
- master

pool:
  vmImage: 'vs2017-win2016'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --output $(System.DefaultWorkingDirectory)/publishWork
  displayName: 'dotnet build $(buildConfiguration)'

- publish: $(System.DefaultWorkingDirectory)/publishWork
  artifact: drop

publish artifactというステップを追加しました
この作業によりビルド結果を利用可能な状態にします。

同時にdotnet build にoutputの追加してartifactには同ディレクトリを指定してますが
このパスは僕がデフォルトのビルド先の「bin/~」フォルダ指定するの嫌なのでこうしただけです

ちなみに2019年6月の更新でYAMLキーワードが新しくなってるようです
Publishing artifacts のYAML(Task)で紹介してる記事も多いですが内容は同じです
https://docs.microsoft.com/en-us/azure/devops/pipelines/artifacts/pipeline-artifacts?view=azure-devops&tabs=yaml

追加したらもう一回Runしておきましょう

ビルド結果からArtifactsが見えるようになってます
Items (4).png

ここからArtifactsのダウンロードも出来るのであの時のリリースの結果を開発環境で再現したい!とかの要求も満たせますね

Pipelinesの作成

最後にリリースpipelineを作成します
AzureDevOpsからPipelines>Releases
「+New」>NewReleasePipeline、テンプレート選択が開くので「IIS website deployment」を選択
Items (5).png

雛形が出来るのでまずは元となるArtifactの選択
Build > 作成したBuildPipeline
Items (6).png

他はそのままでAdd
リリースPipelines自体のトリガーを設定するために⚡から指定branchのビルドをトリガーするように設定
(正直この画面はどこ押したら良いのかわかんない箇所が多い気がする)
Items (7).png
Items (8).png

次にIIS側の設定です
tasksから設定開く
(また設定開く場所がわかりづらくない?)
Items (9).png

WebSitenName,Physical pathなどいつものIISの設定(省略)
deploy groupsを選択
Items (10).png

Package or Folderで発行したartifactを選択します
Items (12).png
Items (11).png

dropはyamlで指定した名前ですね
ちなみにビルドだけした場合ワークディレクトリだけ見えて中身は何も見えません
Items (13).png

ビルドはさっきしたので今度はリリースだけやってみましょう
リリース完了後、IISのフォルダを確認するなりサイトを開くなりして発行されてる事を確認しましょう。

変更をトリガー

最後にちゃんとブランチに変更加えた時にトリガーされるか確認しておきましょう。

以上
お疲れさまでした

まとめ

例に挙げるために.Net & IISを使用したけどまとめると「Artifactを作る、Artifactを投げる」ってだけな感じになった
静的コンテンツだけとかならビルド無くても良いし、なんなら.netじゃなくても良いので
あとAzureDevopsの持つディレクトリ構造はリファレンスを参照して、何がどこに出てどこをyamlで呼べるか把握しとくと良いんじゃないでしょうか
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/build/variables?view=azure-devops&viewFallbackFrom=azdevops&tabs=yaml

まだまだ頻繁に更新されてて、buildだけとかreleaseだけとか情報はあるけど繋げて見るとなんかわからんな?ってなるのが多かったので通しで設定出来て良かった
.NetのためだけにJenkins on Windows環境抱えてる事もあったけどもう全部AzureDevOpsでやろうぜ!って感じで。おすすめです。

3
2
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
3
2