複数のAngularアプリが含まれたNxワークスペースがあります。master が私の GitHub リポジトリで更新されたら、ビルドを開始したいと思います。その部分は、GCB のトリガーで十分に簡単です。しかし、私がやりたいのは、このコマンドを実行することです:
npm run affected:apps
トリガーで、Docker イメージをビルドし、影響を受ける各アプリの Google Container Registry にプッシュします。これまでのところ、私の cloudbuild.yaml ファイルは次のようになっています。
steps:
- name: 'gcr.io/cloud-builders/git'
args: ['fetch', '--unshallow']
- name: node:10.15.1
entrypoint: npm
args: ['run affected:apps --base=origin/master --head=HEAD']
このコマンドは、次のような結果を返します。
> project-name@0.0.0 affected:apps /Users/username/projects/project-folder
> nx affected:apps
Note: Nx defaulted to --base=master --head=HEAD
my-app-1
その結果で Google Cloud をどうするかはわかりません。ノード スクリプトを使用すると、次のようにして、影響を受けるアプリの配列を出力できます。
const { exec } = require('child_process');
function getApps() {
exec('npm run affected:apps', (err, out) => {
if (err) {
console.log(null);
} else {
const lines = out.split('\n');
const apps = lines[lines.length - 2].split(' ');
console.log(JSON.stringify(apps));
}
});
}
getApps();
影響を受けるアプリの配列を返し、エラーの場合は null を返します。それでも、Google Cloud ビルドの次のステップで何をするかはわかりません。コマンドまたはそのスクリプトの結果を使用して、理想的には、次のように docker build コマンドを実行できます。
docker build --file ./:loop variable:/Dockerfile
は:loop variable:
、影響を受けるアプリの名前です。配列内の各値に対してそれを行いたいのですが、何らかの理由でコマンドが影響を受けるアプリを返さない場合は何もしません。
Nx Workspaces で Google Cloud Build を使用する方法についてのアイデア、または Google Cloud ビルドの経験があり、次のステップがどうあるべきかを知っているなら、それは素晴らしいことです。