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

Tom*_*ong 3 pipeline azure-devops azure-pipelines

我有一个脚本可以很好地执行各种依赖项安装和一些手动工作(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
Run Code Online (Sandbox Code Playgroud)

我的 AzurePipelines.yml

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

来自 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.

Run Code Online (Sandbox Code Playgroud)

Bru*_*uno 6

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

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

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

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

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

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