azure-devops - 如何在 Azure Devops Pipelines 中使用本地计算机对代码进行 .pfx 签名?
问题描述
我们为客户端 Microsoft Office 扩展开发,它们确实需要进行代码签名。
对于开发,我.pfx
在 VS -> 项目属性 -> 签名 -> 创建测试证书中做了一个。输入空密码,转储.pfx
到源代码控制中,它正在为整个公司构建,同时开发。
对于插件的发布,情况有所不同,我们需要与客户签署一个扩展,.pfx
他们希望在 Azure DevOps 中添加一个步骤来构建一个管道来自动完成。问题是他们不能使用云解决方案,所以据我了解Azure Key Vault是不可能的。他们确实有一台本地受信任的机器,我们可以将其.pfx
用于签名。
我找不到如何在 Azure Pipelines 中进行签名的方法,它不涉及 Azure Key Vault 或Azure Secure Files,但我希望有一种机制可以做到这一点,因为这似乎是一件很常见的事情。
在 Azure Devops Pipelines 中使用本地计算机对 .pfx 签名代码的首选解决方案是什么?
解决方案
我们最终得到以下结果:
.pfx
在本地构建机器上添加。
向 Azure 构建管道添加了隐藏变量pfxPassword
然后添加以下构建步骤 tp Azure 构建管道:
trigger:
- main
pool:
name: 'XXX Build Pool'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
#change to actual directory where signtool is.
pathToSignTool: "\"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.19041.0\\x64\\signtool.exe\""
pathToPfx: "C:\\XXX\\Install\\XXX_Applications.pfx"
pathToBuildDirectory: "\\XXXYYY\\bin\\Release\\"
pathToMageTool: "\"C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v10.0A\\bin\\NETFX 4.8 Tools\\mage.exe\""
pathToContinousDeployment: "C:\\ContinousDeployment\\YYY\\"
name: $(MajorVersion).$(MinorVersion).$(date:yy)$(DayOfYear)$(rev:.r)
steps:
- task: Assembly-Info-NetFramework@2
inputs:
Path: '$(Build.SourcesDirectory)'
FileNames: |
**\AssemblyInfo.cs
InsertAttributes: true
FileEncoding: 'auto'
WriteBOM: false
VersionNumber: '$(Build.BuildNumber)'
FileVersionNumber: '$(Build.BuildNumber)'
InformationalVersion: '$(Build.BuildNumber)'
LogLevel: 'verbose'
FailOnWarning: false
DisableTelemetry: false
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- script:
$(pathToMageTool) -s $(Build.Repository.LocalPath)$(pathToBuildDirectory)XXXYYY.vsto -cf $(pathToPfx) -pwd %MAPPEDPASS%
env:
MAPPEDPASS: $(pfxPassword)
- script:
$(pathToMageTool) -s $(Build.Repository.LocalPath)$(pathToBuildDirectory)XXXYYY.dll.manifest -cf $(pathToPfx) -pwd %MAPPEDPASS%
env:
MAPPEDPASS: $(pfxPassword)
- script:
$(pathToSignTool) sign /f $(pathToPfx) /p %MAPPEDPASS% $(Build.Repository.LocalPath)$(pathToBuildDirectory)XXXYYY.dll
env:
MAPPEDPASS: $(pfxPassword)
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.Repository.LocalPath)$(pathToBuildDirectory)'
Contents: '**'
TargetFolder: '$(pathToContinousDeployment)'
OverWrite: true
推荐阅读
- c# - 在子视图 XAML 中使用来自父视图的命令
- node.js - Nodejs 是否有任何支持创建 winform 的框架/库?
- python - 需要使用另一个 csv 的值更新一个 csv 中的特定列,但整行会更新
- python - pyttsx3 模块在运行时抛出错误
- python - 如何使用拆分函数从列值创建多列
- kubernetes - 如何检查 Kubernetes 集群中现有的用户和组?
- installshield - 取消选择所有功能不会禁用安装按钮
- vue.js - Vuex 状态在页面重新加载时不返回响应
- azure - 错误:{"code":"InvalidUri","message":"请求的 URI 不代表服务器上的任何资源 - Azure Batch Rest API
- javascript - 在对象数组中,我们需要获取相同的相关 id 并推入一个对象