0

作为我的 CD 管道的一部分,我正在设置一个 Google Cloud Function 来处理新的 repo 推送、创建 docker 映像并将它们推送到注册表。我已经在一台虚拟机上工作,但没有必要为此让一台 24x7 运行。

因此,查看NodeJS 参考库,我找不到使用 node.js 将图像推送到注册表的方法。似乎没有注册表或为节点构建 sdk?

基本上,我只需要从云函数执行这个命令: gcloud builds submit --tag gcr.io/my_project/my_image.

4

1 回答 1

2

使用Cloud Build API很可能做到这一点。这是一个使用Node.js 客户端库的简单示例。

exports.createDockerBuild = async (req, res) => {
    const google = require('googleapis').google;
    const cloudbuild = google.cloudbuild({version: 'v1'});

    const client = await google.auth.getClient({
            scopes: ['https://www.googleapis.com/auth/cloud-platform']
    });
    const projectId = await google.auth.getProjectId();
    const resource = {
            "source": {
                    "storageSource": {
                            "bucket": "my-source-bucket",
                            "object": "my-nodejs-source.tar.gz"
                    }
            },
            "steps": [{
                    "name": "gcr.io/cloud-builders/docker",
                    "args": [
                            "build",
                            "-t",
                            "gcr.io/my-project-name/my-nodejs-image",
                            "standard-hello-world"
                    ]
            }],
            "images": ["gcr.io/$PROJECT_ID/my-nodejs-image"]
    };

    const params = {projectId, resource, auth: client};
    result= await cloudbuild.projects.builds.create(params);

    res.status(200).send("200 - Build Submitted");

};

我的源代码在一个桶里,但你可以很容易地从一个 repo 中提取它。

请记住,您需要使用 Node.js 8 beta 运行时才能使异步内容正常工作。

于 2018-11-22T14:57:56.193 回答