bash - Gitlab-CI:为 Linux 和 Windows 设置环境变量
问题描述
我有一个项目需要能够使用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%"
前半部分将在 Linux 上正确执行,但在 Windows 上会抛出错误。该语法对两个 shell 都是通用的,并且只有在前一个语句失败时||
才会执行后续语句。所以后半部分只会在 Windows 上执行,因为只会失败(当然前提是语法在 Linux 端是正确的)。export
cmd
一个完整的.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
推荐阅读
- python - Python Flask WTForms - 创建动态无线电元素,工作不一致
- sql-server - 使用 Output INTO 子句在表变量中输入多个条目
- cmd - 为什么我的 pip 安装在 WSL ubuntu 中不起作用?
- python - 基于两个参数创建新的 Pandas DataFrame
- javascript - Ebay Trading API 获取物品 Ajax 请求
- reactjs - 如何在尚未定义对象的情况下通过道具发送对象的属性?
- arrays - Postgresql 8.2 数据转储到 Postgresql 10
- ios - 如何在图像中创建边缘检测滤镜?
- video - 在 FFMPEG 中将 zoompan 幻灯片与水印叠加相结合
- c - 这个从 BST 中删除节点的函数有什么问题?