gitlab-ci.yml和shell执行器无法获取用户变量$env:***



Gitlab CI

这里有一个例子来描述我的问题。config.toml:

[[runners]]
name = ...
url = ...
...
executor = shell
shell = "powershell"
....

.gitlab-ci.yml:

test-job:
tags:
- test-runner
script:
- echo $env:windir
- echo $env:OneDrive

输出:

Running with gitlab-runner 15.2.1
...
...
Executing "step_script" stage of the job script
...
...
...
$ echo $env:windir
C:Windows
$ echo $env:OneDrive
Job succeeded

问题

正如你所看到的,没有";echo$env:OneDrive"因为$env:OneDrive是一个用户变量。但是我可以得到";echo$env:windir";因为$env:windir是一个系统变量。

没有输出"echo$env:OneDrive"因为$env:OneDrive是一个用户变量。但是我可以得到";echo$env:windir";因为$env:windir是一个系统变量。

似乎你在这里回答了自己的问题。这是GitLab powershell运行程序的预期(系统定义(行为——所有powershell命令都使用-NoProfile选项执行,这意味着不会使用配置文件,也不会加载用户环境变量。

有一个功能请求可以配置此行为,但在撰写本文时,此功能不可用。因此,必须以另一种方式设置任何此类环境变量(例如,作为系统变量,在runner设置、实例设置或组/项目CICD设置中(。

最新更新