如何为 Azure Pipelines 中的所有脚本步骤配置 Bash 别名?

问题描述 投票:0回答:1

我想在我的 Azure Pipelines CI 模板中创建一个切换参数,该参数将在 1) 使用内置 Gradle 分发和 2) 使用包装器中的 Gradle 分发之间切换。 如果没有这样一个切换,如果我想使用包装器分发,我需要在所有

gradle
步骤中将
./gradlew
命令调用替换为
script:
脚本调用。

我的想法是在主管道步骤开始之前有条件地为 Bash 创建以下别名:

alias gradle='./gradlew'

我的问题是:如何为 Azure Pipelines 创建 Bash 别名,该别名将隐式可用于所有后续

script:
步骤?

根据 Azure Pipelines 日志输出,我可以看到 Bash

script:
步骤被调用为:
/usr/bin/bash --noprofile --norc /home/vsts/work/_temp/your_actual_script_content.sh

所以,我猜

--noprofile --norc
意味着
.profile
.bashrc
文件将被忽略。

我尝试的是为整个管道阶段设置

BASH_ENV=~/my_ci_env.sh
,其中
my_ci_env.sh
包含别名配置。不幸的是,这并没有成功。还有哪些其他方法可能适合我的情况?我非常确定创建这样的别名应该是可能的,因为至少 Azure Pipelines
variables:
中的值以某种方式可以在 Bash
script:
步骤中作为环境变量使用。

bash azure-pipelines
1个回答
0
投票

BASH_ENV
注入的函数方法效果很好。解决办法如下:

steps:
  - ${{ if eq(parameters.useGradleWrapper, true) }}:
    - script: |
        cat >> ~/ci_bash_env.sh <<END
          gradle() {
            ../gradlew "$@"
          }
          export -f gradle
        END
        echo "##vso[task.setvariable variable=BASH_ENV]~/ci_bash_env.sh"

正如 Barmar 在评论中所说,别名在这种情况下似乎不起作用(非交互式 shell),这就是我最初的解决方案失败的原因。

© www.soinside.com 2019 - 2024. All rights reserved.