我想在我的 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_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),这就是我最初的解决方案失败的原因。