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
ambiente { USERNAME = credenciais('es-username') // nome de usuário da conta SSL.com. PASSWORD = credenciais('es-password') // Senha da conta SSL.com. CREDENTIAL_ID = credenciais('es-credential-id') // ID da credencial para assinatura do certificado. TOTP_SECRET = credenciais('es-totp-secret') // OAuth TOTP Secret (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL .com Nome do Ambiente. Para Conta Demo pode ser 'TEST' caso contrário será 'PROD' }
Você encontrará os valores para cada variável em seu painel Jenkins em Segurança> Gerencie 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
ambiente { USERNAME = credenciais('es-username') // nome de usuário da conta SSL.com. PASSWORD = credenciais('es-password') // Senha da conta SSL.com. CREDENTIAL_ID = credenciais('es-credential-id') // ID da credencial para assinatura do certificado. TOTP_SECRET = credenciais('es-totp-secret') // OAuth TOTP Secret (https://www.ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL .com Nome do Ambiente. Para Conta Demo 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-sampleOutros 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.