Dies ist eine Anleitung zum automatisierten Signieren von Code auf Jenkins mithilfe von eSigner CodeSignTool. CodeSignTool ist ein Befehlszeilendienstprogramm, das sich für Signaturen mit hohem Volumen eignet und sich nahtlos in verschiedene CI/CD-Plattformen integrieren lässt. Es ist Teil von eSigner: unserem Remote-Signaturdienst, der einen effizienten, sicheren und benutzerfreundlichen Ansatz für das Signieren von Unternehmenscodes bietet.
Erstellen Sie eine Jenkins-Datei und definieren Sie die Pipeline in Ihrem Code-Editor

Pipeline {Agent beliebige Optionen {buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
Richten Sie das .NET-Tool in Ihrem Code-Editor ein, indem Sie Jenkins konfigurieren
Klicken Sie auf die Verwalte Jenkins Registerkarte auf Ihrem Jenkins-Dashboard.

Scrollen Sie auf der Seite nach unten und klicken Sie auf Global Tool Configuration.

Scrollen Sie nach unten und klicken Sie auf .NET SDK-Installationen.

Kopieren Sie den Wert für .NET SDK und fügen Sie ihn in Ihren Code-Editor ein.


Tools { dotnetsdk "DOTNET_CORE_3.1.24" }
Gehen Sie zu plugins.jenkins.io und installieren Sie das .NET SDK-Plugin

Der Verwalte Jenkins Überprüfen Sie auf Ihrem Dashboard Plugins verwalten um zu bestätigen, ob das .NET SDK-Plugin installiert wurde.


Nachdem Sie bestätigt haben, dass das Plugin installiert wurde, gehen Sie zurück zu .NET SDK-INSTALLATIONEN und stellen Sie sicher, dass die richtige Version und die Release-Details des .NET SDK-Plugins eingestellt sind. Fahren Sie mit dem Klicken fort Gespeichert .

Legen Sie die Umgebungsvariablen in Ihrem Code-Editor fest

environment { USERNAME = credentials('es-username') // SSL.com-Benutzername. PASSWORD = credentials('es-password') // SSL.com-Passwort. CREDENTIAL_ID = credentials('es-crendential-id') // Anmeldeinformations-ID für das Signaturzertifikat. TOTP_SECRET = credentials('es-totp-secret') // OAuth-TOTP-Geheimnis (https://ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL.com-Umgebungsname. Für ein Demo-Konto kann er 'TEST' lauten, ansonsten 'PROD'. }
Sie finden die Werte für jede Variable auf Ihrem Jenkins-Dashboard unter Sicherheit> Verwalten Referenzen.



Legen Sie die Phasen für das Erstellen des Artefaktverzeichnisses, das Pullen des Docker-Images, das Erstellen von .NET und das Code-Signieren des Artefakts fest

1) Artefaktverzeichnis erstellen, um signierte und unsignierte Artefaktdateien zu speichern.
stage('Artefaktverzeichnis erstellen') { Schritte { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } }
2) Ziehen Sie das Codesigner-Docker-Image aus der Github-Registrierung.
stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } }
3) Erstellen Sie ein dotnet-Projekt oder eine Dotnet-Lösung und alle ihre Abhängigkeiten. Nachdem die DLL- oder EXE-Datei erstellt wurde, kopieren Sie sie zum Signieren in den Ordner „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) In diesem Schritt werden die erstellten DLL-Dateien (Artefaktdateien) mit CodeSignTool signiert.
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 -- 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 artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
Erstellen Sie ein Github-Repository
Kopieren Sie jede der Push-Befehlskomponenten auf Github.

Schreiben Sie die Befehle an einem neuen Terminal in Ihrem Code-Editor, um den Code zu pushen.

Gehen Sie nach dem Pushen des Codes zu Ihrem Github-Konto und kopieren Sie den URL-Link Ihres Projekts.

Gehen Sie zu Ihrem Jenkins-Konto und klicken Sie auf die Erstellen Sie einen Job Link.

Wählen Multibranch-Pipeline, Legen Sie den Namen für Ihr Projekt fest und klicken Sie auf OK .

Der BranchenquellenWählen Git und fügen Sie den URL-Link Ihres Github-Projekts ein.

Scrollen Sie nach unten Scannen Sie Multibranch-Pipeline-Trigger. Aktivieren Sie das Kontrollkästchen für Periodisch, wenn nicht anders ausgeführt. Sie können auswählen 2 Мinuten.

Klicken Sie auf die Gespeichert .

Gehen Sie zurück zu Ihrem Jenkins-Konto, klicken Sie auf Ihr Projekt und bestätigen Sie, ob die Pipeline gestartet wurde

Klicken Sie auf Ihr Jenkins-Projekt und wählen Sie es aus Jetzt Multibranch-Pipeline scannen im Dashboard.

Klicken Sie auf Konsolenausgabe

Scrollen Sie nach unten und prüfen Sie, ob die Code-Signierung erfolgreich war

Gesamtes Skript
Definieren Sie die Pipeline
Pipeline {Agent beliebige Optionen {buildDiscarder(logRotator(numToKeepStr: "5")) disableConcurrentBuilds() }
Build-Tools installieren
Tools { dotnetsdk "DOTNET_CORE_3.1.24" //https://plugins.jenkins.io/dotnet-sdk }
Erstellen Sie eine Umgebungsvariable
environment { USERNAME = credentials('es-username') // SSL.com-Benutzername. PASSWORD = credentials('es-password') // SSL.com-Passwort. CREDENTIAL_ID = credentials('es-crendential-id') // Anmeldeinformations-ID für das Signaturzertifikat. TOTP_SECRET = credentials('es-totp-secret') // OAuth-TOTP-Geheimnis (https://ssl.com/how-to/automate-esigner-ev-code-signing) ENVIRONMENT_NAME = 'PROD' // SSL.com-Umgebungsname. Für ein Demo-Konto kann er 'TEST' lauten, ansonsten 'PROD'. }
Skript für die Phasen Build und Sign
stages { // 1) Artefaktverzeichnis zum Speichern von signierten und unsignierten Artefaktdateien erstellen stage('Artefaktverzeichnis erstellen') { steps { sh 'mkdir ${WORKSPACE}/artifacts' sh 'mkdir ${WORKSPACE}/packages' } } / / 2) Codesigner-Docker-Image aus der Github-Registrierung ziehen stage('Docker Pull Image') { steps { sh 'docker pull ghcr.io/sslcom/codesigner:latest' } } // 3) Erstellen Sie ein Dotnet-Projekt oder eine Dotnet-Lösung und all das seine Abhängigkeiten. // Nachdem die DLL- oder Exe-Datei erstellt wurde, kopieren Sie sie zum Signieren in den Ordner „packages“. Release/netcoreapp3.1/HelloWorld-0.0.1.dll ${WORKSPACE}/packages/HelloWorld.dll' } } // 4) In diesem Schritt werden die erstellten DLL-Dateien (Artefaktdateien) mit CodeSignTool signiert. 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 -- 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 artifacts: "artifacts/HelloWorld.dll", onlyIfSuccessful: true } } } } }
Beispiel einer Jenkins-Pipeline
Sehen Sie sich die Beispiel-Jenkins-Pipeline an, die wir erstellt haben github.com/SSLcom/codesigner-jenkins-sample
Andere Leitfäden zur Integration von Remote-Signaturen
- Cloud Code Signing-Integration mit CircleCI
- Cloud Code Signing-Integration mit GitHub-Aktionen
- Cloud Code Signing-Integration mit GitLab CI
- Cloud Code Signing-Integration mit Travis CI
- Cloud Code Signing-Integration mit Azure DevOps
- Cloud Code Signing-Automatisierung mit CI/CD-Diensten
Benötigen Sie kundenspezifische Lösungen?
Mit unserem Expertenwissen und unserem Fünf-Sterne-Support-Personal sind wir bereit und bereit, mit Ihnen an kundenspezifischen Lösungen oder Rabatten für Großseriensignaturen auf Unternehmensebene zu arbeiten. Füllen Sie das untenstehende Formular aus und wir melden uns bei Ihnen.