我想将该人的用户 ID 驱动到运行将文件上传到 gcp 存储桶的管道的团队频道。将文件上传到存储桶中会自动触发 gcp 中的 CF。我可以在日志中看到 CF 状态,但我想查看在团队频道中触发 CF 的人的 ID。我将文件上传到存储桶的管道只有 yml 文件,没有底层 .ps 或 python 文件。
我尝试在构建和发布管道中使用 id_user = $(Build.RequestedForId) ,该管道在 gcp 中部署存储桶和 CF,但无法实现,因为它抛出错误,因为 Build.RequestedForId 不存在于我的日志中。
任何人都可以提出任何解决方案吗?
Azure Pipelines 提供了预定义变量来获取触发管道的用户 ID。当运行管道作业时,这些变量将自动映射为代理机器上的环境变量。
Build.RequestedForId
:触发当前构建/运行的身份ID(经典构建管道/YAML管道)。对应的环境变量是“BUILD_REQUESTEDFORID
”。
Release.RequestedForId
:触发当前发布的身份ID(经典发布管道)。对应的环境变量是“RELEASE_REQUESTEDFORID
”。
如果你想将ID传递到Python脚本文件中(例如,
main.py
)并直接在管道中执行脚本文件,你可以这样做:
在脚本文件中添加以下行。
如果在经典构建管道/YAML 管道中运行。
# main.py
import os
. . .
user_id = os.environ['BUILD_REQUESTEDFORID']
print(f'user_id = {user_id}')
. . .
如果在经典发布管道中运行。
# main.py
import os
. . .
user_id = os.environ['RELEASE_REQUESTEDFORID']
print(f'user_id = {user_id}')
. . .
然后直接执行管道中的Python脚本文件。
- bash: 'python main.py'
displayName: 'Run Python script'
如果您想将 ID 传递到 Python 脚本文件(例如 main.py)中,然后在管道之外执行更新后的脚本文件,您可以执行以下操作:
在脚本文件中添加以下行。
如果在经典构建管道/YAML 管道中运行。
# main.py
import os
. . .
user_id = '{{Build.RequestedForId}}'
print(f'user_id = {user_id}')
. . .
如果在经典发布管道中运行。
# main.py
import os
. . .
user_id = '{{Release.RequestedForId}}'
print(f'user_id = {user_id}')
. . .
然后在管道中,您可以使用扩展“Replace Tokens”提供的管道任务将Python脚本文件中的占位符标记(
{{Build.RequestedForId}}
或{{Release.RequestedForId}}
)替换为相应管道变量的实际值。
- task: qetza.replacetokens.replacetokens-task.replacetokens@5
displayName: 'Replace tokens in main.py'
inputs:
targetFiles: main.py
tokenPattern: doublebraces
keepToken: true
成功运行
Replace Tokens
任务后,Python脚本文件中出现以下行,
user_id = '{{Build.RequestedForId}}'
或
user_id = '{{Release.RequestedForId}}'
将更新为,
user_id = 'xxxxxx'
“
xxxxxx
”是触发管道的用户ID的实际值。然后您可以在管道之外发布/传递更新的脚本文件以执行。