运行 bash AzureDevOps 项目文件夹中的脚本

Running bash script within a project folder of AzureDevOps

我有一个脚本可以很好地执行各种依赖项安装和一些手动工作(NPM 安装,设置项目时需要执行的一些手动步骤),以便在项目能够 运行 .脚本 运行 在本地环境中完全没问题。

我现在正尝试在 Azure DevOps 中构建我的管道,我意识到我不能立即启动脚本。脚本中的 运行 npm install 实际上不在我的项目文件夹中 运行,但它总是 运行 在路径 /Users/runner/work

问题: 如何在我的项目文件夹中执行脚本?

我的脚本文件中的示例代码

set -e

# Setup project dependencies
npm install

# some mandatory manual work
.....

# Pod installation
cd ios 
pod install

我的AzurePipelines.yml

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      sh $(System.DefaultWorkingDirectory)/projectFolder/setup.sh
    failOnStderr: true

来自 Azure 的问题日志(如您所见,由于路径不正确,npm 安装无法正常工作,因此管道内的进一步操作将失败)

npm WARN saveError ENOENT: no such file or directory, open '/Users/runner/work/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/Users/runner/work/package.json'
npm WARN work No description
npm WARN work No repository field.
npm WARN work No README data
npm WARN work No license field.

首先,我建议您将脚本拆分为单个作业的不同步骤或包含多个步骤的多个作业,因为这样可以在将来更轻松地并行处理它们,从而加快构建时间。

为了直接从项目文件夹执行脚本,您可以利用选项工作目录:

- task: Bash@3
  inputs:
   targetType: 'inline'
   script: |
     ./setup.sh
   failOnStderr: true
   workingDirectory: "$(System.DefaultWorkingDirectory)/projectFolder/"

但是在您的情况下,您可以直接指向脚本,而不需要 运行 它作为“脚本”

   - task: Bash@3
      inputs:
       targetType: 'filePath'
       filePath: "$(System.DefaultWorkingDirectory)/projectFolder/setup.sh"
       failOnStderr: true
       workingDirectory: "$(System.DefaultWorkingDirectory)/projectFolder/"

参考:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/bash?view=azure-devops