更改 Cloud Build 中的目录 'cd' 未找到

Changing directories in Cloud Build 'cd' no found

我正在使用云构建来克隆存储库。我可以确认存储库已成功克隆到云构建 /workspace 卷。

steps:
  - id: 'Clone repository'
    name: 'gcr.io/cloud-builders/git'
    args: ['clone', $_REPO_URL]
    volumes:
    - name: 'ssh'
      path: /root/.ssh

我再运行下一步确认

  - id: 'List'
    name: 'alpine'
    args: ['ls']

它告诉我存储库在当前目录中。但是当我尝试 cd 进入目录时 cd 命令不起作用并抛出错误:

ERROR: build step 3 "alpine" failed: starting step container failed: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "cd <repo-name>": executable file not found in $PATH: unknown

我的最终目标是 cd 进入存储库和 运行 一些 git 命令。我稍后使用 alpine,因为 git 构建器镜像也不允许我使用 cd

substitutions:
  _REPO_NAME: 'test-repo'
  _REPO_URL: 'git@bitbucket.org:example/test-repo.git'
  _BRANCH_NAME: 'feature/something'

steps:
  - id: 'Clone repository'
    name: 'gcr.io/cloud-builders/git'
    args: ['clone', $_REPO_URL]
    volumes:
    - name: 'ssh'
      path: /root/.ssh

  - id: 'Check Diff'
    name: 'alpine'
    args: ['cd $_REPO_NAME', '&&', 'git checkout $_BRANCH_NAME', '&&', 'git diff main --name-only']

您可以使用 bash 到 运行 任何您想要的命令。 这是我在我的一个项目中使用的一个例子:

- name: 'gcr.io/cloud-builders/git'
  id: Clone env repository
  entrypoint: /bin/sh
  args:
  - '-c'
  - |
    git clone git@github.com:xyz/abc.git && \
    cd gitops-env-repo/ && \
    git checkout dev   

在您的 *.yaml 文件中使用 dir 字段。

steps:
- name: string
  args: [string, string, ...]
  env: [string, string, ...]
  dir: string
  id: string
  waitFor: [string, string, ...]
  entrypoint: string
  secretEnv: string
  volumes: object(Volume)
  timeout: string (Duration format)
- name: string
  ...
- name: string
  ...
timeout: string (Duration format)
queueTtl: string (Duration format)
logsBucket: string
options:
 env: [string, string, ...]
 secretEnv: string
 volumes: object(Volume)
 sourceProvenanceHash: enum(HashType)
 machineType: enum(MachineType)
 diskSizeGb: string (int64 format)
 substitutionOption: enum(SubstitutionOption)
 dynamicSubstitutions: boolean
 logStreamingOption: enum(LogStreamingOption)
 logging: enum(LoggingMode)
 pool: object(PoolOption)
substitutions: map (key: string, value: string)
tags: [string, string, ...]
serviceAccount: string
secrets: object(Secret)
availableSecrets: object(Secrets)
artifacts: object (Artifacts)
images:
- [string, string, ...]

https://cloud.google.com/build/docs/build-config-file-schema