如何在Fastlane Match与Azure DevOps Pipeline中获取并使用Bearer令牌?
解决Azure Pipeline中Fastlane Match访问证书仓库的问题
方案一:使用Bearer令牌(HTTPS方式)
一、生成有效PAT(Bearer令牌)
- 登录Azure DevOps,进入个人资料 → 安全 → 个人访问令牌(PAT)
- 创建新PAT:
- 设置有效期(按需选择,建议不要过长)
- 权限范围勾选代码(读取&写入)(Match需要克隆、推送证书仓库)
- 创建后立即复制PAT,这是唯一可查看的机会,妥善保存
二、本地环境测试配置
在Fastfile中直接配置HTTPS仓库地址和bearer参数:
match( type: "appstore", # 可替换为development/adHoc,按需选择 git_url: "https://dev.azure.com/[组织名]/[项目名]/_git/[证书仓库名]", git_bearer_authorization: "[你的PAT]", app_identifier: ["com.yourapp.target1", "com.yourapp.target2"], # 多目标配置 # 其他Match参数按需添加 )
注意:无需对PAT做Base64编码,直接使用原始字符串即可
三、Azure Pipeline集成
- 将PAT存入Pipeline的变量组或保密变量,勾选「保密」选项防止明文泄露
- 在YAML中引用变量:
variables: - group: 证书仓库权限组 # 或直接定义变量:FASTLANE_MATCH_GIT_BEARER_AUTHORIZATION: $(你的PAT变量名)
- 修改Fastfile读取环境变量,避免硬编码:
match( type: "appstore", git_url: "https://dev.azure.com/[组织名]/[项目名]/_git/[证书仓库名]", git_bearer_authorization: ENV["FASTLANE_MATCH_GIT_BEARER_AUTHORIZATION"], app_identifier: ["com.yourapp.target1", "com.yourapp.target2"], )
- 确保Pipeline代理能正常访问Azure DevOps的HTTPS地址,无特殊网络限制
方案二:使用SSH方式(git@ URL)
一、生成SSH密钥对(本地操作)
打开终端执行命令,一路回车生成密钥对(默认路径~/.ssh/id_ed25519):
ssh-keygen -t ed25519 -C "你的关联邮箱"
二、配置Azure DevOps公钥
- 进入证书仓库 → 设置 → 存储库权限,添加Pipeline使用的账号(个人账号或服务账号),权限设为读取&写入
- 进入该账号的个人资料 → 安全 → SSH公钥,上传本地生成的
id_ed25519.pub文件内容
三、Pipeline中配置SSH密钥
- 将本地生成的私钥(
id_ed25519文件内容)存入Pipeline的保密变量,若存在换行符可先做Base64编码避免格式问题 - 在YAML中添加
InstallSSHKey任务(需放在Fastlane任务之前):
steps: - task: InstallSSHKey@0 inputs: sshPublicKey: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... 你的公钥内容' sshPrivateKey: '$(你的私钥保密变量名)' knownHostsEntry: 'ssh.dev.azure.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl'
说明:
knownHostsEntry可通过本地执行ssh-keyscan ssh.dev.azure.com获取,避免主机验证弹窗
四、Fastfile配置SSH仓库地址
match( type: "appstore", git_url: "git@ssh.dev.azure.com:v3/[组织名]/[项目名]/[证书仓库名]", app_identifier: ["com.yourapp.target1", "com.yourapp.target2"], # 其他Match参数按需添加 )
注意事项
- Bearer令牌方案更适合CI环境,权限可控性强,无需管理密钥对
- SSH方案需严格保障私钥安全,避免泄露
- 两种方案都必须确保Pipeline使用的账号拥有证书仓库的读写权限
内容的提问来源于stack exchange,提问作者Robin Macharg
相关产品推荐
相关产品推荐

