从Google Cloud Functions构建Docker映像

时间:2018-11-06 16:55:21

标签: google-cloud-platform google-cloud-functions google-cloud-build

作为CD管道的一部分,我正在设置Google Cloud Function以处理新的回购推送,创建docker映像并将其推送到注册表。我所有的工作都在一台VM上进行,但是不必为此仅运行24x7。

因此,查看NodeJS reference library时,我找不到使用node将映像推送到注册表的方法。似乎没有针对节点的注册表或构建SDK?

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

1 个答案:

答案 0 :(得分:0)

很有可能使用Cloud Build API来做到这一点。这是一个使用client libary for 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");

};

我的源代码在存储桶中,但是您可以轻松地将其从存储库中提取出来。

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