Continuous integration 使用PubSub和Google Scheduler一致部署Cloudfunction

Continuous integration 使用PubSub和Google Scheduler一致部署Cloudfunction,continuous-integration,terraform,gcloud,continuous-deployment,Continuous Integration,Terraform,Gcloud,Continuous Deployment,我正在尝试自动化三个模块的部署:云函数,它是通过云调度器的PubSub订阅调用的。目前我有一个使用gcloud命令的脚本: gcloud beta pubsub topics create $SCHEDULE_NAME || echo "Topic $SCHEDULE_NAME already created." gcloud beta functions deploy $SCHEDULE_NAME --region $CLOUD_REGION --mem

我正在尝试自动化三个模块的部署:云函数,它是通过云调度器的PubSub订阅调用的。目前我有一个使用gcloud命令的脚本:

    gcloud beta pubsub topics create $SCHEDULE_NAME || echo "Topic $SCHEDULE_NAME already created."
    gcloud beta functions deploy $SCHEDULE_NAME
      --region $CLOUD_REGION
      --memory 128MB
      --runtime nodejs10
      --entry-point $ENTRY_POINT
      --trigger-topic $SCHEDULE_NAME
      --vpc-connector cloud-function-connector
    # gcloud scheduler jobs delete $JOB_NAME # does not work as it needs YES non-interactively
    gcloud scheduler jobs create pubsub $SCHEDULE_NAME --message-body='RUN' --topic=$SCHEDULE_NAME --schedule='27 2 * * *' --time-zone='Europe/London' || true

这是可行的,但是我不确定这是否是最正确的方法。例如,如果作业已经存在,则无法仅更新作业。我在考虑terraform,但我不确定它是否仅用于部署这三个小模块。我还发现了无服务器工具,但它似乎只能部署云功能,而不能部署调度器和pubsub主题。

我认为您的方法简单明了

Terraform是否提供作业更新功能?如果是这样,您可能会发现它只是删除然后重新创建作业。我认为这种更新工作的方法也很好,似乎提供了更多的控制;您可以在更新计划之前|之后检查计划是否即将启动

Google提供了一个特定于Google云的部署工具。根据我的经验,它的主要好处是它是服务器端的,但最终,您只是自动化了与gcloud相同的api

如果您想学习一种以代码形式管理基础设施的工具,我建议您使用Terraform而不是Deployment Manager

使现代化 调度器API支持“修补”作业:

此机制由gcloud支持:

gcloud alpha计划程序作业更新