如何在管道中启动GCP VM?

时间:2020-11-05 22:41:27

标签: google-cloud-platform continuous-integration yocto google-cloud-build

我有点奇怪,不打算用于GCP。因此,我需要使用Google Cloud Platform做一些事情。我们使用比办公室Ubuntu VM更强大的工具来构建yocto。我以某种方式无法弄清楚在Google Cloud中打开VM的正确.yaml是什么。管道应从bitbucket运行,并应满足以下要求

(伪代码)

start up the vm in gcp && ssh builder@server 
cd  ./repo/build
start build && push build image to repo server
push logs to pipeline
shutdown

我知道google cloud的构建,但是我们有一些依赖关系可能会使其效率低下,现在我已经大致了解了yaml的外观,但是我可以在其中使用一些更好的指针。正如我确定的那样,这是错误的。

steps:
  - name: 'gcloud compute instances start build-server-turnoff-when-unused' 

  - name: buildstep
    script: /bin/bash build.sh

  - name: 'send logs'
    script: /bin/bash sendlogs.sh
    

  - name: gcloud compute instances stop build-server-turnoff-when-unused'

我想知道以前是否有人做过这样的事情并且可以帮助我?

2 个答案:

答案 0 :(得分:1)

假设您的目录如下所示:

.
./cloudbuild.yaml
./repo
./repo/build
./repo/build/build.sh
./repo/build/sendLogs.sh

您的Yaml文件应如下所示:

steps:

#0 Start Instance
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'instances', 'start', 'INSTANCE', '--zone', 'ZONE']

#1 Build Step
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  dir: 'repo/build'
  args: ['./build.sh']

#2 Send Logs
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  dir: 'repo/build'
  args: ['./sendLogs.sh']

#3 Stop Instance
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'instances', 'stop', INSTANCE, '--zone', 'ZONE']

在这种情况下,我们在构建步骤中使用了dir字段来设置运行脚本时要使用的工作目录。另外,请确保您的Cloud Build服务帐户在IAM上具有 Compute Admin 角色,以便您可以在构建步骤中启动和停止Compute Engine实例。

服务帐户名称:

project-number@cloudbuild.gserviceaccount.com

答案 1 :(得分:0)

我对 bitbucket 中的管道究竟是如何工作的理解有点错误,我发现我可以下载 google-cloud sdk 并通过管道发出命令。

image: google/cloud-sdk:latest 

pipelines:
  default:
    - step:
        name: "Start build instance"
        script:
          - echo ${GCLOUD_JSON_KEY} > client-secret.json
          - gcloud auth activate-service-account --key-file client-secret.json
          - gcloud config set project $project-name
          - 'gcloud compute instances start build-serve --zone=america-west4-b'