私はvue-cliを使って作成して構築しているvue.jsアプリケーションを持っています。.env.test
および.env.prod
ファイルにいくつかの環境変数があります。
アプリを構築するには、Azure Devopsを使用しています。npm run build:test
またはnpm run build:prod
それは、Azure Devopsリリースパイプラインのステージに入力される異なるアーティファクトを生成します。
私が直面している問題は、あらゆる環境に別々のビルドを持っていきたくありません。 1つを構築し、さまざまな環境に展開したいです。
すべての環境のパッケージを一度ビルドするようにそれらの変数を処理するにはどうすればよいですか。それは良い習慣ですか?または私が今持っているようにさまざまな環境のための異なるパイプラインを持っているべきですか?
だから私たちは同様の問題を抱えていました。私たちは、変数グループを扱うために解決策を更新しようとしていますが、あなたがいつでもこのようなことをすることができます:
- 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つ持っていることを可能にしました。
このようなものを使用する場合、最後の手順は、ビルドタグとブランチに基づいてリリースパイプラインに取得されたときにビルドをフィルタリングします。