Este é um guia sobre como fazer assinatura de código automatizada no Jenkins com o uso do eSigner CodeSignTool. CodeSignTool é um utilitário de linha de comando adequado para assinaturas de alto volume e integra-se perfeitamente a várias plataformas de CI/CD. Ele faz parte do eSigner: nosso serviço de assinatura remota que oferece uma abordagem eficiente, segura e fácil de usar para assinatura de código empresarial.
Crie um arquivo Jenkins e defina o pipeline em seu editor de código

pipeline { agent any options { buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
Defina a ferramenta .NET em seu editor de código configurando Jenkins
Clique na Gerenciar Jenkins guia no painel do Jenkins.

Role a página e clique em Global Tool Configuration.

Role para baixo e clique Instalações do SDK do .NET.

Copie o valor para .NET SDK e cole-o em seu editor de código.


ferramentas { dotnetsdk "DOTNET_CORE_3.1.24" }
Acesse plugins.jenkins.io e instale o plugin .NET SDK

Debaixo Gerenciar Jenkins no seu Painel, verifique Gerenciar Plugins para confirmar se o plugin .NET SDK foi instalado.


Depois de confirmar que o plug-in foi instalado, volte para INSTALAÇÕES DO .NET SDK e certifique-se de que a versão correta e os detalhes de lançamento do plug-in do .NET SDK estejam definidos. Prossiga para clicar no Economize botão.

Defina as variáveis de ambiente em seu editor de código

environment { USERNAME = credentials('es-username') // Nome de usuário da conta SSL.com. PASSWORD = credentials('es-password') // Senha da conta SSL.com. CREDENTIAL_ID = credentials('es-credential-id') // ID da credencial para assinatura do certificado. TOTP_SECRET = credentials('es-totp-secret') // Segredo TOTP do OAuth (https://ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // Nome do ambiente SSL.com. Para contas de demonstração, pode ser 'TEST', caso contrário, será 'PROD' }
Você encontrará os valores para cada variável em seu painel Jenkins em Segurança> Gerenciar Credenciais.



Defina os estágios para criar o diretório de artefatos, extrair a imagem do docker, construir o .NET e assinar o código do artefato

1) Crie o diretório de artefatos para armazenar arquivos de artefatos assinados e não assinados.
stage('Criar diretório de artefatos') { steps { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } }
2) Puxe a imagem do Docker do Codesigner do Github Registry.
stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } }
3) Construa um projeto ou solução dotnet e todas as suas dependências. Após a criação do arquivo dll ou exe, copie para a pasta 'packages' para assinatura.
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) Esta é a etapa onde os arquivos DLL (artefato) criados serão assinados com o CodeSignTool.
stage('Assine e salve Dotnet Core DLL Artifact') { steps { sh 'docker run -i --rm --dns 8.8.8.8 --network host --volume ${WORKSPACE}/packages:/codesign/examples -- volume ${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 artefatos: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
Criar um repositório do Github
Copie cada um dos componentes do comando push no Github.

Escreva os comandos em um novo terminal em seu editor de código para enviar o código.

Depois de enviar o código, acesse sua conta do Github e copie o link da URL do seu projeto.

Vá para sua conta Jenkins e clique no botão Crie um emprego link.

Escolha Pipeline Multiramal, defina o nome do seu projeto e clique no botão OK botão.

Debaixo Fontes de filiais, selecione Git e cole o link da URL do seu projeto Github.

Role para baixo até Analisar gatilhos de pipeline de várias ramificações. Marque a caixa para Periodicamente, se não for executado de outra forma. Você pode selecionar 2 minutos.

Clique na Economize botão.

Volte para sua conta Jenkins, clique no seu projeto e confirme se o pipeline foi iniciado

Clique no seu projeto Jenkins e selecione Digitalizar pipeline multiramal agora no painel.

Clique Saída do console

Role para baixo e verifique se a assinatura do código foi bem-sucedida

Script completo
Defina o pipeline
pipeline { agent any options { buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
Instalar ferramentas de compilação
ferramentas { dotnetsdk "DOTNET_CORE_3.1.24" //https://plugins.jenkins.io/dotnet-sdk }
Crie uma variável de ambiente
environment { USERNAME = credentials('es-username') // Nome de usuário da conta SSL.com. PASSWORD = credentials('es-password') // Senha da conta SSL.com. CREDENTIAL_ID = credentials('es-credential-id') // ID da credencial para assinatura do certificado. TOTP_SECRET = credentials('es-totp-secret') // Segredo TOTP do OAuth (https://ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // Nome do ambiente SSL.com. Para contas de demonstração, pode ser 'TEST', caso contrário, será 'PROD' }
Script para as etapas de construção e assinatura
stage { // 1) Criar diretório de artefatos para armazenar arquivos de artefatos assinados e não assinados stage('Criar diretório de artefatos') { steps { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } } / / 2) Puxe a imagem do Docker do Codesigner do Github Registry stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } } // 3) Crie um projeto ou solução dotnet e todos suas dependências. // Depois de criado o arquivo dll ou exe, copie para a pasta 'packages' para assinatura 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) Esta é a etapa onde os arquivos DLL (artefato) criados serão assinados com CodeSignTool. stage('Assine e salve Dotnet Core DLL Artifact') { steps { sh 'docker run -i --rm --dns 8.8.8.8 --network host --volume ${WORKSPACE}/packages:/codesign/examples -- volume ${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 artefatos: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
Amostra de Pipeline Jenkins
Confira o exemplo de pipeline do Jenkins que criamos em github.com/SSLcom/codesigner-jenkins-sample
Outros guias de integração de assinatura remota
- Integração de assinatura de código em nuvem com CircleCI
- Integração do Cloud Code Signing com ações do GitHub
- Integração do Cloud Code Signing com GitLab CI
- Integração do Cloud Code Signing com o Travis CI
- Integração de assinatura de código em nuvem com Azure DevOps
- Automação de assinatura de código em nuvem com serviços de CI/CD
Precisa de soluções personalizadas?
Com nosso conhecimento especializado e equipe de suporte cinco estrelas, estamos prontos e dispostos a trabalhar com você em soluções personalizadas ou descontos em assinaturas de alto volume de nível empresarial. Preencha o formulário abaixo e entraremos em contato.