如何将环境变量传递给 TeamCity Agent 构建配置

How to pass Environment Variables to TeamCity Agent build configuration

我正在设置 TeamCity 服务器和代理。代理在 docker 容器(Windows 服务器核心)中运行,我定义了要在代理容器上设置的各种环境变量,最终设置为 Windows 环境变量。有些是通过 docker-compose 传入的,有些是在构建映像时在我的代理 Dockerfile 中设置的,使用 RUN SETX /M NAME VALUE。当我在代理上打开控制台并在 cmd 中键入 SET 时,我可以看到它们。

但是,当我查看 TeamCity 服务器门户中的代理并查看它们的代理参数 -> 环境变量时 - 我没有看到我定义的任何操作系统环境变量。看起来是传入了 PATH 变量,但没有传入其他变量。

如何将特定环境变量传递给我的代理构建配置?


不幸的是,我找到的唯一方法在这里列出

将以下内容放入 buildAgent.properties 文件中,如下所示:

1
2
env.MYVAR=%MYVAR%
env.MYVAR2=%MYVAR2%

TeamCity Agent 映像基于 windows nanoserver,它不适合我的需要,因此我必须自己创建 buildagent.properties 文件(不确定如何编辑自动创建的现有文件)。为此,我使用以下批处理脚本,我将其作为代理的 docker 容器的入口点运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
::------------------------------
for /f"tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set"dt=%%a"
set"YY=%dt:~2,2%" & set"YYYY=%dt:~0,4%" & set"MM=%dt:~4,2%" & set"DD=%dt:~6,2%"
set"HH=%dt:~8,2%" & set"Min=%dt:~10,2%" & set"Sec=%dt:~12,2%"
set DTStamp=%YYYY%-%MM%-%DD%_%HH%-%Min%
::------------------------------

echo ##############################################################
echo Run-Agent.bat: %DTStamp%
echo ##############################################################

cd C:\\BuildAgent\\conf\\
IF NOT EXIST buildagent.properties echo buildagent.properties not found - Creating buildagent.properties... && (
echo serverUrl=%SERVER_URL%
echo name=%AGENT_NAME%
echo workDir=../work
echo tempDir=../temp
echo systemDir=../system
echo authorizationToken=%AGENT_TOKEN%
echo env.MYVAR1=%MYVAR1%
echo env.MYVAR2=%MYVAR2%
echo env.MYVAR3=%MYVAR3%
) > buildagent.properties

echo running TeamCity Build Agent in background...
cd C:\\BuildAgent\\bin\\
start /b service.start.bat

cd \\
C:\\Windows\\System32\\cmd.exe
@echo on

这似乎对我有用。