Azure DevOps Pipelines中bash脚本任务如何访问Service Connection?
实现方案
你可以直接通过Azure Pipeline Bash任务的内置服务连接绑定能力实现需求,不需要手动创建任何变量或变量组存储凭证,所有敏感信息由平台在任务运行时动态注入,运行后自动销毁。
1. 前置准备
提前在Azure DevOps项目中创建好对应的Service Connection:
- 对接Docker仓库/ JFrog Docker镜像库创建
Docker Registry类型的Service Connection - 对接JFrog全功能操作可创建
JFrog Platform类型的Service Connection
2. 完整YAML配置示例
trigger: - main pool: vmImage: 'ubuntu-latest' steps: - task: Bash@3 displayName: 执行Docker、JFrog登录登出操作 inputs: targetType: 'inline' addSpnToEnvironment: true # 开启服务连接凭证注入能力 script: | # 第一次登录Docker(JFrog镜像库) docker login your-jfrog-domain.com -u $DOCKER_CONN_USER -p $DOCKER_CONN_PWD # 执行镜像拉取、推送等操作 docker pull your-jfrog-domain.com/your-image:tag # 第一次登出 docker logout your-jfrog-domain.com # 中间执行其他不需要登录的操作 # 第二次登录(直接复用注入的凭证,不需要额外存变量) docker login your-jfrog-domain.com -u $DOCKER_CONN_USER -p $DOCKER_CONN_PWD # 执行其他镜像操作 docker push your-jfrog-domain.com/new-image:tag # 第二次登出 docker logout your-jfrog-domain.com # JFrog CLI登录登出操作逻辑相同 # 登录JFrog平台 jf config add jfrog-inst --url=$JFROG_CONN_URL --user=$JFROG_CONN_USER --apikey=$JFROG_CONN_KEY --interactive=false # 执行制品上传、下载等操作 jf rt upload ./local-file generic-repo/path/ # 登出JFrog jf config rm jfrog-inst env: # 直接绑定已创建的Service Connection,无需手动填写凭证值 DOCKER_CONN_USER: $(serviceConnection:your-docker-connection-name.username) DOCKER_CONN_PWD: $(serviceConnection:your-docker-connection-name.password) JFROG_CONN_URL: $(serviceConnection:your-jfrog-connection-name.url) JFROG_CONN_USER: $(serviceConnection:your-jfrog-connection-name.user) JFROG_CONN_KEY: $(serviceConnection:your-jfrog-connection-name.apikey)
3. 核心说明
- 上述配置中
env字段的凭证是Azure DevOps运行时动态注入的,不属于你需要提前维护的管道变量或变量组,完全符合要求。 - 所有敏感信息在流水线日志中会被自动打码,不会泄露。
- 如果需要在多个Bash任务中重复执行登录登出,只需要在每个任务的
env字段绑定同一个Service Connection即可,不需要重复维护凭证。
内容的提问来源于stack exchange,提问作者gmpy1990
相关产品推荐
相关产品推荐

