这是有关如何使用 eSigner CodeSignTool 在 Jenkins 上进行自动代码签名的指南。
CodeSignTool 是一个命令行实用程序,适用于大量签名并与各种 CI/CD 平台无缝集成。 它构成了 eSigner 的一部分:我们的远程签名服务为企业代码签名提供了一种高效、安全和用户友好的方法。
SSL.com的 EV 代码签名 证书 通过最高级别的验证帮助保护您的代码免遭未经授权的篡改和损害,并且只需 $ 249每年.
创建 Jenkins 文件并在代码编辑器上定义管道
管道 { 代理任何选项 { buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
通过配置 Jenkins 在代码编辑器上设置 .NET 工具
点击 管理詹金斯 Jenkins 仪表板上的选项卡。
向下滚动页面并单击全局工具配置。
向下滚动并单击 .NET SDK 安装.
复制 .NET SDK 的值并将其粘贴到代码编辑器中。
工具 { dotnetsdk "DOTNET_CORE_3.1.24" }
转到 plugins.jenkins.io 并安装 .NET SDK 插件
下 管理詹金斯 在您的仪表板上,检查 管理插件 确认是否已安装 .NET SDK 插件。
确认插件已安装后,返回 .NET SDK INSTALLATIONS 并确保设置了正确的 .NET SDK 插件版本和发布详细信息。 继续点击 已保存 按钮。
在代码编辑器上设置环境变量
environment { USERNAME = credentials('es-username') // SSL.com 帐户用户名。 PASSWORD = credentials('es-password') // SSL.com 帐户密码。 CREDENTIAL_ID = credentials('es-crendential-id') // 用于签名证书的凭证 ID。 TOTP_SECRET = credentials('es-totp-secret') // OAuth TOTP 秘密 (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL .com 环境名称。 对于模拟账户,它可以是“TEST”,否则它将是“PROD”}
您将在 Jenkins 仪表板上找到每个变量的值 安全> 管理 证书。
设置创建工件目录、拉取 docker 映像、构建 .NET 和对工件进行代码签名的阶段
1)为存储签名和未签名的工件文件创建工件目录。
stage('创建工件目录') { 步骤 { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } }2) 从 Github Registry 中提取 Codesigner Docker 镜像。
stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } }3) 构建一个 dotnet 项目或解决方案及其所有依赖项。 创建 dll 或 exe 文件后,复制到“packages”文件夹进行签名。
stage('Build Dotnet') { steps { sh 'dotnet build dotnet/HelloWorld.csproj -c Release' sh 'cp dotnet/bin/Release/netcoreapp3.1/HelloWorld-0.0.1.dll ${WORKSPACE}/packages/ HelloWorld.dll' } }4) 这是使用 CodeSignTool 对创建的 DLL(工件)文件进行签名的步骤。
stage('Sign and Save Dotnet Core DLL Artifact') { steps { sh 'docker run -i --rm --dns 8.8.8.8 --network host --volume ${WORKSPACE}/packages:/codesign/examples --卷 ${WORKSPACE}/artifacts:/codesign/output -e USERNAME=${USERNAME} -e PASSWORD=${PASSWORD} -e CREDENTIAL_ID=${CREDENTIAL_ID} -e TOTP_SECRET=${TOTP_SECRET} -e ENVIRONMENT_NAME=${ ENVIRONMENT_NAME} ghcr.io/sslcom/codesigner:latest sign -input_file_path=/codesign/examples/HelloWorld.dll -output_dir_path=/codesign/output'} post { always { archiveArtifacts artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
SSL.com的 EV 代码签名 证书 通过最高级别的验证帮助保护您的代码免遭未经授权的篡改和损害,并且只需 $ 249每年.
创建一个 Github 存储库
复制 Github 上的每个推送命令组件。在代码编辑器的新终端上编写命令以推送代码。
推送代码后,进入你的 Github 账号,复制你项目的 URL 链接。
进入您的 Jenkins 帐户并单击 创造工作 链接。
多分支管道, 为您的项目设置名称,然后单击 OK 按钮。
下 分支来源, 选择 混帐 并粘贴您的 Github 项目的 URL 链接。
向下滚动到 扫描多分支管道触发器. 选中复选框 如果没有,则定期运行。 您可以选择 2分钟.
点击 已保存 按钮。
回到你的 Jenkins 账户,点击你的项目,并确认流水线是否已经启动
单击您的 Jenkins 项目并选择 立即扫描多分支管道 在仪表板上。
点击 控制台输出
向下滚动并检查代码签名是否成功
整个脚本
注意:确保更正脚本中的印刷错误或错误的换行符,以便签名过程顺利进行。
定义管道
管道 { 代理任何选项 { buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
安装构建工具
工具 { dotnetsdk "DOTNET_CORE_3.1.24" //https://plugins.jenkins.io/dotnet-sdk }
创建环境变量
environment { USERNAME = credentials('es-username') // SSL.com 帐户用户名。 PASSWORD = credentials('es-password') // SSL.com 帐户密码。 CREDENTIAL_ID = credentials('es-crendential-id') // 用于签名证书的凭证 ID。 TOTP_SECRET = credentials('es-totp-secret') // OAuth TOTP 秘密 (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL .com 环境名称。 对于模拟账户,它可以是“TEST”,否则它将是“PROD”}
构建和签名阶段的脚本
stages { // 1) 为存储已签名和未签名的工件文件创建工件目录/ 2) Pull Codesigner Docker Image From Github Registry stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } } // 3) 构建一个 dotnet 项目或解决方案以及所有它的依赖。 // 创建 dll 或 exe 文件后,复制到 'packages' 文件夹进行签名Release/netcoreapp3.1/HelloWorld-0.0.1.dll ${WORKSPACE}/packages/HelloWorld.dll' } } // 4) 这是使用 CodeSignTool 对创建的 DLL(工件)文件进行签名的步骤。 stage('Sign and Save Dotnet Core DLL Artifact') { steps { sh 'docker run -i --rm --dns 8.8.8.8 --network host --volume ${WORKSPACE}/packages:/codesign/examples --卷 ${WORKSPACE}/artifacts:/codesign/output -e USERNAME=${USERNAME} -e PASSWORD=${PASSWORD} -e CREDENTIAL_ID=${CREDENTIAL_ID} -e TOTP_SECRET=${TOTP_SECRET} -e ENVIRONMENT_NAME=${ ENVIRONMENT_NAME} ghcr.io/sslcom/codesigner:latest sign -input_file_path=/codesign/examples/HelloWorld.dll -output_dir_path=/codesign/output'} post { always { archiveArtifacts artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
Jenkins 流水线示例
查看我们创建的示例 Jenkins 管道 github.com/SSLcom/codesigner-jenkins-sample其他远程签名集成指南
- 与 CircleCI 的云代码签名集成
- 云代码签名与 GitHub Actions 的集成
- 云代码签名与 GitLab CI 的集成
- 云代码签名与 Travis CI 的集成
- 云代码签名与 Azure DevOps 的集成
- 使用 CI/CD 服务实现云代码签名自动化
需要定制解决方案?
凭借我们的专业知识和五星级支持人员,我们已准备好并愿意与您合作制定定制解决方案或企业级大批量签约折扣。 填写下面的表格,我们会与您联系。