Jenkins ile NuGet Paketleri Oluşturulması ve Nexus’a Gönderilmesi(with Kubernetes Pod)
NuGet dotnet ile yazılım geliştirirken kullanılan harici paketlerin yönetimini sağlamaktadır. Bir proje geliştirirken, geliştirdiğimiz projenin farklı sürümlerinde farklı paketler kullanabiliriz ve bu durumda da NuGet paketlerini versiyonlamakta fayda vardır.
Biz bu yazımızda;
- Git üzerindeki NuGet projesine gelen push event ile Jenkins pipeline tetikleyeceğiz.
- Pipeline bizim için Kubernetes üzerinde Jenkins agent pod oluşturacak ve bu pod içerisinde dotnet container çalıştıracak.
- NuGet paketimiz burada build olacak.
- Build olan NuGet paketi Nexus’a gönderilecek.
- Kubernetes ortamında oluşturulan jenkins agent pod terminate edilecek.
Not: Jenkins ve Kubernetes entegresyonu için şu yazımı okuyabilirsiniz.
Jenkins Dashboard → New Item → Pipeline oluşturulur.
Gitlab’da bulunan NuGet projemize push geldiği zaman Jenkins Pipeline çalışması için gerekli ol Build when a change is pushed to Gitlab özelliği aktif edilir ve Advenced alanınca bulunan Secret token kopyalanır.
Gitlab proje içerisinde Settings → Webhooks alanına gidilir, url ve secret token bilgileri doldurulur.
Webhook konfigürsayonu tamamlandı. Bunun testini pipeline konfigürasyonu tamamlanınca yapacağız. Şimdi tekrardan Jenkins üzerindeki Pipeline’a girerek Pipeline Script olarak aşağıdaki scripti yazıyoruz.
podTemplate(containers: [
containerTemplate(
name: 'dotnet',
image: 'mcr.microsoft.com/dotnet/sdk:6.0',
command: 'sleep',
args: '30d'
)
]) {
node(POD_LABEL) {
stage('Get a Nuget project') {
container('dotnet') {
stage('Build a Nuget project') {
sh '''
export NEXUS_SERVER="NUGETHOST"
export NEXUS_REPOSITORY="nuget-hosted"
export NEXUS_USERNAME="User"
export NEXUS_PASSWORD="Pass"
export NEXUS_NUGET_KEY="xxxxxxxx"
export GITLAB_TOKEN="glpat-xxxxxxxxxxxxxxx" git config --global http.sslVerify false
echo " RESTORING NUGET PACKAGES "
apt-get update && apt-get install -y nuget
nuget sources Add -Name Nexus -Source ${NEXUS_SERVER}/repository/${NEXUS_REPOSITORY}/ -username ${NEXUS_USERNAME} -password ${NEXUS_PASSWORD}
git clone @git.i01.xxxx.com/xxxx-adf/adf.core.git">https://oauth2:${GITLAB_TOKEN}@git.i01.xxxx.com/xxxx-adf/adf.core.git
cd adf.core && ls
dotnet build -c Release
#nuget spec Adf.Core
#cd src/src/Adf.Core
#nuget pack
dotnet nuget push src/Adf.Core/bin/Release/*.nupkg --source ${NEXUS_SERVER}/repository/${NEXUS_REPOSITORY}/ --api-key ${NEXUS_NUGET_KEY}
'''
}
}
}}
}
Yukarıda paylaştığım script bizim için kubernetes jenkins agent pod içerisinde bir dotnet container da oluşturarak NuGet build işlemlerinin yapılmasını ve oluşturulan paketin Nexus’a gönderilmesini sağlayacaktır.
Hem Pipeline hem Gitlab webhook’u test etmek için tekrardan Gitlab’da webhook ekranına gidilir ve Test → Push events ile webhook çalıştırılır.
Pipeline başarılı şekilde tetiklendi ve kubernetes üzerinde pod oluşturuldu.
Ve pipeline başarılı şekilde tamamlandı.
Jenkins Console Output’dan baktığımızda Adf.Core.1.0.2.nupkg Nexus’a gönderilmiş görünüyor.
Nexus NuGet repository’den kontrol ediyoruz ve işlem başarılı.