Jenkins är ett automatiseringsverktyg med öppen källkod som används flitigt för kontinuerlig integration och kontinuerlig leverans (CI/CD) av programvaruapplikationer. Jenkins tillhandahåller ett webbaserat användargränssnitt som gör det enkelt att konfigurera och hantera jobb, vilka är automatiserade uppgifter som kan schemaläggas att köras vid specifika tidpunkter eller utlösas av specifika händelser. Dessa jobb kan användas för att kompilera kod, köra tester, distribuera applikationer och utföra många andra uppgifter relaterade till programvaruutveckling.
Några av Jenkins viktigaste funktioner inkluderar:
-
Enkel installation och installation
Jenkins är enkelt att installera och konfigurera och kan konfigureras på en mängd olika operativsystem och plattformar.
-
Kraftfull jobbhantering
Jenkins låter dig skapa och hantera jobb, vilket är automatiserade uppgifter som kan schemaläggas att köras vid specifika tidpunkter eller utlösas av specifika händelser. Jobb kan användas för att kompilera kod, köra tester, distribuera applikationer och utföra många andra uppgifter relaterade till mjukvaruutveckling.
-
Brett utbud av plugins och integrationer
Jenkins har ett stort antal plugins och integrationer tillgängliga, vilket gör att det kan fungera med många olika verktyg och tekniker. Detta gör det mycket anpassningsbart och flexibelt.
-
Stöd för pipelines
Jenkins har starkt stöd för pipelines, vilka är uppsättningar av steg som definierar ett arbetsflöde för mjukvaruutveckling. Pipelines kan definieras med hjälp av kod, vilket gör dem mycket anpassningsbara och enkla att versionskontrollera.
-
Inbyggt teststöd
Jenkins erbjuder inbyggt stöd för många olika typer av tester, inklusive enhetstester, integrationstester och funktionstester. Detta gör det enkelt att köra tester som en del av ett kontinuerligt integrationsarbetsflöde, vilket säkerställer att alla kodändringar testas noggrant innan de driftsätts till produktion.
-
Skalbarhet
Jenkins kan enkelt skalas för att stödja stora utvecklingsteam och komplexa arbetsflöden för mjukvaruutveckling.
-
Öppen källkod
Jenkins är programvara med öppen källkod, vilket innebär att den är gratis att använda och kan anpassas för att möta de specifika behoven hos ditt utvecklingsteam.
Samdesign med Jenkins
För att utföra samdesign med Jenkins, följ stegen nedan.
Kodsignering är en procedur som verifierar författarens legitimitet och originaliteten och äktheten hos digital information, särskilt programkod. Det säkerställer också att informationen inte är skadlig kod. Dessutom garanterar det att informationen inte har ändrats, förfalskats eller annullerats efter att ha signerats digitalt.
Att integrera Jenkins med kodsignering, kort sagt: installera SignTool och KSP-klienten på Jenkins-agenten, ge Jenkins-tjänstkontot endast de specifika, snäva behörigheter som KSP kräver (inte den lokala administratören), och lägg sedan till en pipeline-fas som anropar signtool mot det KSP-registrerade certifikatet. Den privata nyckeln finns kvar i HSM hela tiden; pipelinen hanterar den aldrig direkt.
Key Takeaways
- Jenkins-tjänstkontot ska aldrig behöva fullständiga lokala administratörsrättigheter för signering. Om du stöter på ett behörighetsfel, bevilja den specifika åtkomst som KSP eller signtool behöver, ange inte standardåtkomst till administratör för att få felet att försvinna.
- Den här sidan behandlar Jenkins specifikt som en plattformshandledning. För den bredare referensarkitekturen, godkännandegrindar och revisionsbevismodellen, se Bästa praxis för kodsignering i SDLC.
Förutsättningar för att utföra denna uppgift inkluderar:
- Jenkins-installation och konfiguration på din enhet
- Signtool installerat och konfigurerat
- ECSigning KSP installerad och konfigurerad.
För att installera och konfigurera Jenkins, gå igenom länken.
För att installera och konfigurera Signtool, följ stegen nedan:
Signtool kan laddas ner som en del av Windows SDK. Ladda ner Windows SDK: ( developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ )
Du kan välja att endast installera Windows SDK-signeringsverktygen för skrivbordsappar.
Öppna filen winsdksetup.exe. Kom ihåg standardsökvägen som visas i installationssökvägen, eftersom det kommer att vara till hjälp när du kör dessa kommandon från kommandotolken.

På sidan Sekretess för Windows Kits är båda alternativen för att tillåta Microsoft att samla in insikter okej. Klicka på Nästa.

Acceptera licensavtalet

Avmarkera alla funktioner utom Windows SDK-signeringsverktyg för skrivbordsappar och välj sedan installera.

När du tillfrågas om du vill tillåta att den här appen gör ändringar väljer du ja.


Klicka på Windows sökfält i aktivitetsfältet och skriv "Redigera systemmiljövariablerna" och välj alternativet med samma namn på kontrollpanelen.

Klicka på miljövariabler.

Innan du redigerar variabellistan, navigera till den plats där Windows SDK är installerat med hjälp av Utforskaren. Du måste kopiera sökvägen till mappen som innehåller signtool-programmet. Standardsökvägen är C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64, se skärmdumpen nedan. Se till att högerklicka och kopiera sökvägen som visas. Du kan också se signtool-programmet längst ner i fillistan, det är detta kommando du kommer att köra.

I listan Systemvariabler klickar du på ny. Skriv sedan Sökväg som variabelnamn och kopiera och klistra in den ovannämnda sökvägen. Klicka sedan på OK i fönstret för miljövariabler och systemegenskaper.

För att testa installationen, öppna kommandotolken och skriv signtool, så bör utdata vara som visas nedan.

Standardinstallationsplatsen för signtool är till exempel: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64
För att konfigurera KSP, följ stegen nedan:
Encryption Consulting erbjuder lösningen CodeSignSecure . Lösningen kan hjälpa dig med manipulationssäker förvaring av nycklar och fullständig insyn och kontroll över kodsigneringsaktiviteter. De privata nycklarna till kodsigneringscertifikatet kan lagras i en HSM för att eliminera riskerna med stulna, skadade eller missbrukade nycklar.
Om du använder vår lösning kan du ladda ner KSP med hjälp av stegen nedan:
- Logga in Kodsignera säkert.
-
Navigera till: Arkiv för signeringsverktyg.

- Ladda ner “Krypteringskonsulting CNG-SigningKSP”
-
Installera klientverktygen med hjälp av .MSI-installationsprogrammet. .MSI-installationsprogrammet automatiserar mycket av konfigurationen. Navigera till var den nedladdade filen är sparad och starta installationsprogrammet.

-
Klicka på Nästa när installationsguiden visas.

-
Klicka på nästa.

- I Användarnamn fält, skriv admin.
-
I fältet Kod kopierar du koden från Postman API Repository . Klicka på GetLoginToken API och kopiera koden från brödtexten.
Ladda ner PostMan från den här länken . När nedladdningen är klar klickar du på knappen "hoppa över" längst ner i fönstret. Lägg till en ny samling med hjälp av plustecknet bredvid "samlingar" på instrumentpanelen.
GetLoginToken API (http://codesignsecureapi.encryptionconsulting.com/api/auth/GetLoginToken): Detta är det viktigaste API:et, eftersom det ger dig en Bearer-token att använda med resten av API:erna. Vad som ska finnas i texten visas nedan. Koden fungerar som ett lösenord för att få en Bearer-token, användarfältet är användarnamnet och identitetstypfältet anger användartypen. Klicka på Skicka för att generera en utdata som har Bearer-token listad längst ner. Kopiera denna token för användning.

- Ändra Identitet Typ till 1.
- Lämna API-basURL det samma.
-
Klicka på nästa.

-
Klicka på nästa.

-
Du får då ett meddelande om att programmet kommer att göra ändringar på din dator, klicka på ja.

-
Installationen är nu klar.

När Jenkins har konfigurerats behöver tjänstkontot som kör det behörighet att anropa signtool och nå KSP:n. Detta kräver inte fullständiga lokala administratörsrättigheter, och att köra Jenkins som administratör för att lösa ett problem med signeringsbehörighet är en kränkning av minsta behörighet som är värd att undvika. Det faktiska kravet är snävare: Jenkins-tjänstkontot behöver läsåtkomst till certifikatfilens sökväg som refereras i pipelinen och vilken specifik behörighet som KSP-klienten kräver för att autentisera sig mot signeringstjänsten (vanligtvis en registrerad klientidentitet, inte lokal administratör). Bevilja den specifika åtkomsten via ett dedikerat tjänstkonto med låg behörighet istället för att använda administratörsbehörighet som standard. Se din KSP:s dokumentation för exakt vilken behörighet som behövs istället för att bevilja breda rättigheter för att kringgå ett oklart fel.
- Gå till tjänster på ditt system (du kan söka efter det) för att kontrollera vilket konto Jenkins för närvarande körs som, synligt i kolumnen "Logga in som".
- Om Jenkins inte kan nå signtool eller KSP:n på grund av ett behörighetsfel, är lösningen att ge det specifika tjänstkontot den begränsade behörighet som saknas (filåtkomst till certifikatsökvägen eller KSP-klientregistrering), inte att byta konto till administratör. Dubbelklicka på Jenkins i Tjänster, eller högerklicka och välj Egenskaper, sedan Logga in, för att visa och justera kontots behörigheter.
När vi har ställt in detta går vi vidare till Jenkins. Oavsett vilken URL/hostnamn du angav tidigare under konfigurationen, kommer du att nå Jenkins genom att navigera till det från din webbläsare. I mitt system har jag ställt in det som http://localhost:8080/ (Det är också standard).
Följ stegen nedan i din instrumentpanel:
-
Från instrumentpanelen klicka på Nytt objekt.

-
Ange valfritt objektnamn och klicka på pipeline och klicka på ok.

-
På konfigurationssidan, under Allmänt, skriv in en önskad beskrivning.

-
Scrolla ner till botten för att hitta Pipeline.

-
Skriv skriptet i skriptrutan och klicka på spara. Du måste redigera din miljövariabel enligt dina inställningar.
pipeline { agent valfri miljö { SM_KEY_NAME='evcodesigning' SM_CLIENT_CERT_FILE='C:\\Användare\\Administratör\\Skrivbord\\FörTesting\\evcodesigning.pem' SM_HASHING_ALGORITHM='SHA256' SM_TIME_STAMP_SERVER="http://timestamp.digicert.com" SM_FILEPATH="C:\\Användare\\Administratör\\Skrivbord\\FörTesting\\AgentService.exe" } stages { stage('Kodsignering') { steps { dir('C:\\Användare\\Administratör\\Skrivbord\\FörTesting'){ bat 'signtool signera /csp "Krypteringskonsulttjänst för nyckellagring" /kc %SM_KEY_NAME% /fd %SM_HASHING_ALGORITHM% /f %SM_CLIENT_CERT_FILE% /tr %SM_TIME_STAMP_SERVER% /td SHA256 %SM_FILEPATH%' } } } } } -
Klicka på bygg nu så ser du ett byggnummer som visas på skärmen.

-
Om du klickar på byggnumret och väljer konsolutdata ser du att din fil har signerats.

Verifiering och felhantering
Behandla inte "pipeline-steget är slutfört" som bevis på att signaturen är giltig. Lägg till ett verifieringssteg omedelbart efter signering som körs signtool verify /pa mot den signerade filen och misslyckas med byggprocessen om verifieringen inte returnerar lyckad uppdatering, vilket upptäcker ett tyst signeringsfel innan artefakten flyttas vidare i pipelinen. Om pipelinen rapporterar ett signeringsfel, kontrollera tabellen nedan innan du antar att certifikatet är ogiltigt.
| Fel | Troligtvis orsak | Fast |
|---|---|---|
| Inga certifikat hittades som uppfyllde alla angivna kriterier | KSP-containernamnet (SM_KEY_NAME) matchar inte en registrerad nyckel, eller så är KSP-klienten inte autentiserad. | Bekräfta det exakta containernamnet och kontrollera KSP:ns autentiseringsstatus igen oberoende av pipelinen. |
| Åtkomst nekad | Jenkins-tjänstkontot saknar den specifika behörighet som KSP behöver (detta är inte en anledning att bevilja administratörsbehörighet) | Bevilja den snäva behörighet som KSP-dokumentationen anger för klientautentisering |
| Den angivna tidsstämpelservern kunde antingen inte nås eller returnerade ett ogiltigt svar | Nätverk/brandvägg som blockerar TSA-URL:en, eller ett tillfälligt TSA-avbrott | Bekräfta utgående åtkomst till tidsstämpelns URL; försök igen, eftersom TSA-avbrott vanligtvis är övergående. |
Om det vid återställning senare visar sig att en build har signerats felaktigt (fel certifikat, fel fil), försök inte att "fixa" signaturen på plats; kassera artefakten och kör pipelinen igen från signeringsstadiet mot en korrigerad konfiguration, så att det finns en ren revisionslogg som visar att den ursprungliga felaktiga artefakten aldrig släpptes snarare än ändrades i det tysta.
Vanliga frågor om partihandel med mat och dryck
Behöver Jenkins-tjänstkontot administratörsrättigheter för att köra signtool?
Nej. Den behöver den specifika behörighet som KSP kräver för att autentisera och få åtkomst till certifikatsökvägen som refereras i pipelinen, inte fullständiga lokala administratörsrättigheter. Att behandla ett behörighetsfel som en anledning att bevilja administratörsrättigheter är en vanlig men undvikbar överträdelse av minsta behörighet.
Hur vet jag att pipelinen faktiskt producerade en giltig signatur, inte bara att scenen inte orsakade något fel?
Lägg till ett verifieringssteg som körs signtool verify /pa mot den signerade filen och misslyckas med byggandet på något annat än lyckat resultat, snarare än att anta att ett slutfört signeringssteg innebär en giltig signatur.
Går den privata nyckeln någonsin igenom Jenkins-agenten?
Nej, i en korrekt konfigurerad installation. Agenten skickar en signeringsbegäran via KSP till den HSM-baserade signeringstjänsten; den privata nyckeloperationen sker inuti HSM.
