1

我有一个 Concourse 作业,将 repo 拉入 docker 映像,然后在其上执行命令,现在我需要执行来自 docker 映像的脚本,完成后在 repo 中执行命令,如下所示:

run:
  dir: my-repo-resource
  path: /get-git-context.sh && ./gradlew
  args:
    - build

get-git-context.sh是来自我的 docker 映像的脚本,并且.gradlew是我的 repo 中带有参数的标准 gradlew build,我使用这种方法收到以下错误:

./gradlew: no such file or directory

意味着在执行第一个命令时将作业 cd'd 到 / 中,只执行一个命令就可以了。我还尝试添加两个运行部分:

run:
  path: /get-git-context.sh
run:
  dir: my-repo-resource
  path: ./gradlew
  args:
  - build

但是只执行了第二部分,连接这两个命令的正确方法是什么?

4

1 回答 1

0

我们通常通过将逻辑包装在 shell 脚本中并设置路径:/bin/bash和相应的 args(脚本的路径)来解决这个问题。

run:
  path: /bin/sh
  args:
    - my-repo_resource/some-ci-folder/build_script.sh

另一种选择是定义两个任务并通过作业的工作区传递资源,但我们通常会执行比两个更多的步骤,这会导致复杂的管道:

plan:
  - task: task1
    config:
    ...
      outputs:
        - name: taskOutput
      run:
        path: /get-git-context.sh

  - task: task2
    config:
      inputs:
   ## directory defined in task1
        - name: taskOutput 
      run:
        path: ./gradlew
        args:
         - build
于 2020-12-04T09:09:27.080 回答