en English
X

Select Language

Powered by Google TranslateTranslate

We hope you will find the Google translation service helpful, but we don’t promise that Google’s translation will be accurate or complete. You should not rely on Google’s translation. English is the official language of our site.

en English
X

Select Language

Powered by Google TranslateTranslate

We hope you will find the Google translation service helpful, but we don’t promise that Google’s translation will be accurate or complete. You should not rely on Google’s translation. English is the official language of our site.

云代码签名与 Jenkins CI 的集成

这是有关如何使用 eSigner CodeSignTool 在 Jenkins 上进行自动代码签名的指南。

CodeSignTool 是一个命令行实用程序,适用于大量签名并与各种 CI/CD 平台无缝集成。 它构成了 eSigner 的一部分:我们的远程签名服务提供了一种高效、安全和用户友好的代码签名方法。

SSL.com的 EV 代码签名 证书通过最高级别的验证帮助保护您的代码免受未经授权的篡改和破坏,并且只需 $ 249每年。 您也可以 大规模使用您的 EV 代码签名证书 使用 eSigner 在云中。

马上订购

创建 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 Secret (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) REGISTRY_PASSWORD = credentials('es-github -token') // 拉代码签名者 Docker 映像的 Github 令牌 REGISTRY_USERNAME = 'bayrakmustafa' // 拉代码签名者 Docker 映像的 Github 注册表用户名 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 镜像。
阶段('Docker 拉图像'){ 步骤 { sh 'docker pull ghcr.io/bayrakmustafa/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/bayrakmustafa/codesigner:latest sign -input_file_path=/codesign/examples/HelloWorld.dll -output_dir_path=/codesign/output' } post { always { archiveArtifacts artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
 

创建一个 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 Secret (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) REGISTRY_PASSWORD = credentials('es-github -token') // 拉代码签名者 Docker 映像的 Github 令牌 REGISTRY_USERNAME = 'bayrakmustafa' // 拉代码签名者 Docker 映像的 Github 注册表用户名 ENVIRONMENT_NAME = 'PROD' // SSL.com 环境名称。 对于模拟账户,它可以是“TEST”,否则它将是“PROD”}

构建和签名阶段的脚本

stage { // 1) 为存储已签名和未签名的工件文件创建工件目录 stage('创建工件目录') { steps { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } } / / 2) Pull Codesigner Docker Image From Github Registry stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/bayrakmustafa/codesigner:latest' } } // 3) 构建一个 dotnet 项目或解决方案以及所有它的依赖关系。 // 创建dll或exe文件后,复制到'packages'文件夹进行签名阶段('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/bayrakmustafa/codesigner:latest sign -input_file_path=/codesign/examples/HelloWorld.dll -output_dir_path=/codesign/output' } post { always { archiveArtifacts artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }

其他远程签名集成指南

有关 eSigner 订阅和代码签名证书的信息,包括大批量和自定义解决方案,请联系  或填写下面的表格。  

订阅 SSL.com 的时事通讯

不要错过SSL.com上的新文章和更新