のタレントフォームを使用してAzureウェブアプリケーションの設定CD


このポストでは、私はAzure WebApp(Azure機能(このケースのAzure機能)のために連続配達プロセスを構成するつもりです.少し面白いように、私は新しい方法でコードアプローチとして設定を使用するつもりですOctopus provider for Terraform .
バックルアップしましょう.

工具


地形


私は必要terraform 私のマシンで

オクトパス展開


このポストのために、私はAにサインアップしましたfree tier of Octopus Deploy SaaS offering . もちろん、自己ホストのバージョンも同様に動作します.
サインアップして、私のアカウントを構成するとき、私はTerraformで使用するつもりである新しいAPIキーを生成することができます

すべての設定はデフォルトのスペースに対して行われるSpaces-1 ), しかし、それも設定可能です.

紺碧


アコと一緒にタコを展開するには、サービスプリンシパルが必要になります.
# (!) make sure to follow the principle of least privilege here 
# and define the role and scope
az ad sp create-for-rbac --name sp-octopus-deploy
テントウムシID、アプリケーションID、パスワード、およびサブスクリプションIDの値.後で彼らを注意します.

紺碧関数


デモのために、私は提供されるヘッダーのリストであなたのGET要求に答えるこの超簡単なAzure機能を使用するつもりです.
完全なソースコードはpublished here .
the .csx GISTは以下の通りです
< div >

紺碧の悪魔


< tt > Azure devopsでciを実行します.p >
プロジェクトの設定はとても簡単で、それはterraform設定ですcan be found here .


パイプラインそのものhere .


< p >複雑なものはない
<ウル>
  • ビルドAzure関数
  • Azure devopsアーティファクト( ZIP )をパックする
  • アップロードは、タコの展開の組み込みフィードに
  • トリガーとタコのリリースリリース
  • < ull >
    私はまだ待っているthe fix to my bug-report to be delivered , それがなければ、このデモを終わりから終わりまではできません

    インプット


    Terraform Providerは他のプロバイダとは異なり、Terraform Registry


    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/de5608266e39e4bd3656ee42971f4f9e.js//>
    < div >
    < p >とterraform init 行方不明のファイル
    < P >


    構成


    デモのために、私はこれを持っているつもりですterraform.tfvars ファイルをterraformに設定します.p >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/527980e58759626fc4988833cc3a07e4.js//>
    < div >

    環境設定


    現在、我々は出発する準備ができています.まず、新しい設定をする予定ですEnvironment .


    Environments are how you organize your deployment targets (whether on-premises servers or cloud services) into groups that represent the different stages of your deployment pipeline, for instance, development, test, and production.


    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/a36c0c2d6ef23f5aa412b7b7199a6f27.js//>
    < div >
    あなたは多分1つ以上を持っているでしょう、しかし、それは今のためにしますp >

    展開目標


    次の重要な部分はDeployment Target


    With Octopus Deploy, you can deploy software to Windows servers, Linux servers, Microsoft Azure, AWS, Kubernetes clusters, cloud regions, or an offline package drop. Regardless of where you're deploying your software, these machines and services are known as your deployment targets.


    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/f7c46cdc117a2f4fa8aa8709971ced5b.js//>
    < div >
    私は使っていますoctopusdeploy_azure_web_app_deployment_target , それはかなり具体的です.私は、より多くの将軍を使うことができました octopusdeploy_deployment_target 代わりにp >
    これはAzure(私のサービスプリンシパル)とタコでリンクしています.p >
    現在、我々はタコで定義されたきれいできれいなインフラストラクチャを持っています.p >
    < P >


    プロジェクト


    次のステップは、設定することですProject .


    Projects let you create and manage your deployment processes, releases, and runbooks from the Octopus REST API and Octopus Web Portal.


    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/3c38307ef53cff53631edad17ece29a2.js//>
    < div >
    を設定していますEcho Api ここにプロジェクトDefault Project Group デフォルトでlifecycle .


    < P >


    展開プロセス


    そして今はジューシーな部分ですp >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/46cf47377155fef292da378d0cb0fdca.js//>
    < div >
    私の展開は、実際には、単純には、組み込みのフィードからパッケージを拾って、私の唯一の環境にプッシュしている1つのステップだけです.p >
    すべての展開が単純であることを願っていますp >
    < P >


    リリース


    最初に、私はリリース作成を自動化して、私のAzure devopsパイプラインを通してそれを誘発したかったです、しかし、最近のバグのため、私はここで妨げられます.今のところ手動で処理されているので、このポストを更新します.p >
    私はZIPファイルから新しいリリースを作成しています.
    < P >


    そして今、私は後ろに座ることができ、それが私の関数を展開するのを見ることができますp >
    < P >


    < url >p >
    < P >


    輸入


    タコ展開に関するきちんとした部分は、リソースIDのシステムです.あなたのterrform状態に既存のリソースをインポートするのが簡単になるオブジェクトのIDを見つけるのは簡単です.p >
    < tt >環境設定が既にあると仮定しますbr/>
    <> P >
    クラスをハイライト表示する
    https://cloud-eng.octopus.app/app#/Spaces-1/infrastructure/machines?environmentIds=Environments-7
    
    < div >
    URLがこのように見えます.Environments-7 は私の環境のIDです.p >
    < ch >環境をインポートするのにかかるのは、リソースを宣言して1つのコマンドを入力することです.
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/asizikov/2301838944f3e1d5f4259451fa9a2a13.js//>
    < div >
    これは長い間、AzureでIDを取得するのが簡単ではありません.

    this is a cross-post from my personal blog.