我有一个包含多个 Angular 应用程序的 Nx 工作区。当 master 在我的 GitHub 存储库中更新时,我希望开始构建。使用 GCB 的触发器,这部分很容易。但我想要发生的是运行这个命令:
npm run affected:apps
在触发器上,并为每个受影响的应用构建 Docker 映像并将其推送到 Google Container 注册表。到目前为止,我的 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:
受影响的应用程序的名称在哪里。我想对数组中的每个值执行此操作,如果由于某种原因该命令未返回任何受影响的应用程序,则不执行任何操作。
关于如何将 Google Cloud Build 与 Nx Workspaces 结合使用的任何想法,或者如果您刚刚获得了 Google Cloud 构建经验并且知道我的下一步应该是什么,那就太好了。