gra*_*ild 2 bash continuous-integration cmd gitlab-ci gitlab-ci-runner
我有一个项目需要能够使用Git 存储库中的相同文件通过 Linux或Windows 上的 Gitlab-Runner 进行构建。.gitlab-ci.yml这是一个简单的构建,我只想使用shell执行器。
问题在于bash (Linux) 中设置环境变量的语法与cmd (Windows)不同。一个使用export另一个set。
config.toml如何设置我的环境而不需要在每个跑步者上设置不同的环境?(在修改 时,这在 Linux 上似乎也有问题$PATH,但这是另一个问题。)
您可以在两个 shell 中使用||条件执行的通用语法来编写在一个操作系统上失败但在另一个操作系统上不会失败的命令。export在设置环境变量的情况下,可以利用不存在的事实cmd来创建某种肮脏的操作系统检查:
export PATH="$MYPATH/:$PATH" || set "PATH=%MYPATH%\;%PATH%"
Run Code Online (Sandbox Code Playgroud)
前半部分在 Linux 上可以正确执行,但在 Windows 上会抛出错误。该语法对于两个 shell 都是通用的,并且仅当前一个语句失败时||才会执行后一个语句。所以后半部分只会在 Windows 上执行,因为只会失败(当然前提是 Linux 端的语法正确)。exportcmd
完整的.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
Run Code Online (Sandbox Code Playgroud)