web-dev-qa-db-ja.com

Azure Devopsリリースパイプラインを使用してvue.jsアプリケーションをデプロイします

私はvue-cliを使って作成して構築しているvue.jsアプリケーションを持っています。.env.testおよび.env.prodファイルにいくつかの環境変数があります。

アプリを構築するには、Azure Devopsを使用しています。npm run build:testまたはnpm run build:prod

それは、Azure Devopsリリースパイプラインのステージに入力される異なるアーティファクトを生成します。

私が直面している問題は、あらゆる環境に別々のビルドを持っていきたくありません。 1つを構築し、さまざまな環境に展開したいです。

すべての環境のパッケージを一度ビルドするようにそれらの変数を処理するにはどうすればよいですか。それは良い習慣ですか?または私が今持っているようにさまざまな環境のための異なるパイプラインを持っているべきですか?

9
chamix

だから私たちは同様の問題を抱えていました。私たちは、変数グループを扱うために解決策を更新しようとしていますが、あなたがいつでもこのようなことをすることができます:

- script: |
    npm install
    npm run test:unit
    if [ $? -ne 0 ]; then
        exit 1
    fi
    npm run build-prod
  condition: and(succeeded(), not(in(variables['Build.Reason'], 'PullRequest', 'Manual')))
  displayName: 'npm install, test and build for prod'

- script: |
    npm install
    npm run test:unit
    if [ $? -ne 0 ]; then
        exit 1
    fi
    npm run build
  condition: and(succeeded(), in(variables['Build.Reason'], 'PullRequest', 'Manual'))
  displayName: 'npm install, test and build for test'
 _

スクリプトのクイックブレークダウン。ビルドがプルレクタまたはマニュアルの一部であった場合、デフォルトのビルドスクリプトを使用したステージングビルドが必要でした。そうでなければ、ビルドが生産のためのものであると仮定しました(これを強制するために分岐ポリシーがいくつか欲しいのですが)。次に、リリースパイプラインが次のように設定したビルドタグをチェックしました。

- task: PowerShell@2
  condition: and(succeeded(), not(in(variables['Build.Reason'], 'PullRequest', 'Manual')))
  inputs:
    targetType: 'inline'
    script: 'Write-Host "##vso[build.addbuildtag]release"'

- task: PowerShell@2
  condition: and(succeeded(), in(variables['Build.Reason'], 'PullRequest', 'Manual'))
  inputs:
    targetType: 'inline'
    script: 'Write-Host "##vso[build.addbuildtag]test"'
 _

今、私がこれから離れていると言ったように、それはかなりよく仕事をしていました、そしてそれは何でも派手なことをする必要なしに正しい設定で展開するビルドを1つ持っていることを可能にしました。

このようなものを使用する場合、最後の手順は、ビルドタグとブランチに基づいてリリースパイプラインに取得されたときにビルドをフィルタリングします。

0
rahicks