我有一个项目,需要能够使用Git存储库中的相同.gitlab-ci.yml
文件通过Linux 或 Windows上的Gitlab-Runner构建。这是一个简单的构建,我只想使用shell
执行程序。
问题在于,在 bash (Linux)中设置环境变量的语法与 cmd (Windows)不同。一个使用export
,另一个使用set
。
如何在不为每个跑步者设置不同的config.toml
的情况下设置我的环境? (在Linux上修改$PATH
时似乎也有问题,但这是另一个问题。)
答案 0 :(得分:0)
您可以在两个shell中使用通用的||
语法进行条件执行,以编写将在一个OS上通过但不在另一个OS上通过的命令。在设置环境变量的情况下,可以利用export
中不存在cmd
的事实来创建脏污的OS检查:
export PATH="$MYPATH/:$PATH" || set "PATH=%MYPATH%\;%PATH%"
上半部分将在Linux上正确执行,但在Windows上将引发错误。 ||
语法在两个Shell中都是通用的,并且在前一个失败时将仅执行后继语句 。因此后半部分将仅在Windows上执行,因为export
仅在cmd
中失败(当然,前提是语法在Linux端是正确的)。
完整的.gitlab-ci.yml
可能看起来像这样:
stages:
- release
before_script:
# set environment for both Linux (first half) and Windows (second half)
- export PATH="$MYPATH/:$PATH" || set "PATH=%MYPATH%\;%PATH%"
my-app:
stage: release
script:
- ./gradlew build