[英]Error using gcloud compute scp with Google Cloud Build
我一直在嘗試使用 Google Cloud Build 觸發器運行gcloud compute scp
命令。 我希望將我的代碼復制到列出的服務器中的相應目錄。
但是,當我在 Cloud Shell 中執行gcloud compute scp * username@instance-name:/home/directory --zone=us-central1-a --recurse
時,它起作用了,這有點奇怪。
但是當我在cloudbuild.yaml
文件中寫入等效項時,它失敗並出現錯誤: *: No such file or directory
。
以下是我的cloudbuild.yaml
的內容:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute' , 'scp' , '*', 'username@instance-name:/home/directory' , '--zone=us-central1-a', '--recurse']
我也嘗試過使用remote-builder ,但也失敗並出現錯誤:
ssh: connect to host <ip_address> port 22: Connection timed out
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
我還通過將源*
替換為/workspace/*
、 ./*
等來嘗試其他組合,但它們都不起作用。 使用 source as /workspace/
執行是可行的,但會復制整個workspace
目錄,而不是根據需要復制目錄的內容。
我也試過運行以下設置,但也失敗了。
cloudbuild.yaml
:
- name: 'ubuntu'
args: ['bash', '-c' , 'scp', '*', 'username@instance-name:/home/directory']
錯誤:
Already have image: ubuntu
scp: command not found
同樣,我只想使用 Cloud Build 將我的代碼復制到 VM。 請幫忙。
對於“gcr.io/cloud-builders/gcloud”容器鏡像選項:
星號“*”由bash
解釋並在將引用對象傳遞給命令之前展開,並且由於直接使用此容器映像中的gcloud
而不是通過bash
作為中介,“*”未展開,而是按字面意思傳遞到gcloud
命令,它沒有找到任何名為“*”的文件。 如果您需要復制存儲庫中的所有代碼(遞歸目錄及其文件),請使用相同的命令,但寫入根符號“/”(順便說一下,它是一個文字 - 不可擴展 - 到bash
),代替 ”*”。
對於 bash 的 OS 容器映像選項:
容器鏡像必須默認安裝scp
才能以這種方式工作,而“ubuntu”鏡像默認沒有。 您可以使用默認安裝了openssh-client
package 的圖像,或者將其安裝到位然后運行命令,如下所示(對於步驟語法,請檢查此):
steps:
- name: 'ubuntu'
entrypoint: 'bash'
args:
- '-c'
- |
sudo apt update && sudo apt install openssh-client -y && scp * username@instance-name:/home/directory
我遇到過同樣的問題。 我最終創建了兩個步驟:
- name: 'google/cloud-sdk:slim'
args:
- compute
- scp
- '--recurse'
- '--compress'
- /workspace/dist
- 'build@instance-1:/var/www/'
- '--zone'
- us-west2-a
id: copy-file-to-server
entrypoint: gcloud
- name: 'google/cloud-sdk:slim'
args:
- compute
- ssh
- '--zone'
- us-west2-a
- build@instance-1
- '--'
- 'mv /var/www/dist /var/www/$_SHORT_SHA '
id: rename-dist
entrypoint: gcloud
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.