Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Eski Jenkins Kurulumlarını Okumak ve Taşımak: Freestyle'dan Pipeline'a, Blue Ocean'dan Pipeline Graph View'a, Java 17'den 21'e
Eski bir Jenkins'i önce envanterle okur, sonra adım adım taşırsın: önce Java 21, sonra Jenkins sürümü, sonra job'lar. 2.580.2'nin Java 17'de açılmayı reddeden gerçek mesajı, controller ve agent için Java takvimi, Freestyle config.xml'inin Jenkinsfile karşılığı, deprecated Blue Ocean yerine Pipeline Graph View, JNLP'den WebSocket'e ve GitHub Actions Importer'a kısa bakış.
Jenkins'i Kod Olarak Yönetmek: Configuration as Code (JCasC), plugins.txt ve Yedekleme
Jenkins'i Git'teki Dockerfile, pin'li plugins.txt ve JCasC YAML'ı ile kod olarak yönetir, JENKINS_HOME'da yalnız durumu yedeklersin. YAML'ın yapısı, export'un şifreli secret tuzağı, elle yapılan değişikliğin reload'da geri alınması, --available-updates, 2.580.1'den beri war'da gömülü plugin olmaması, 1,7 MB'lık yedek, gerçek restore testi ve LTS upgrade akışı.
Jenkins Shared Library: Ortak Pipeline Kodunu vars/ ve src/ ile Paylaşmak
Shared Library, tekrar eden pipeline kodunu ayrı bir repository'de vars/ step'leri ve src/ class'ları olarak tutar; pipeline'lar onu @Library('lib@v1.2.0') ile tag'e pin'leyerek yükler. dotnetCi ve angularCi step'leri, JCasC ile global library, pin'siz main'in riski, trusted global ve sandbox'taki folder library farkının gerçek çıktısı, JenkinsPipelineUnit testi ve ne zaman library yazmamak gerektiği.
Jenkins'te Parallel, Matrix, input ve Deploy Stage'leri
Aynı paketi önce staging'e, agent'sız bir input onayından sonra production'a sshagent, rsync ve systemctl ile deploy ediyoruz; Lockable Resources eşzamanlılığı, milestone ise sırayı çözer. Health check'li deploy script'i, eski build'in yeniden sonra deploy ettiği gerçek kilit çıktısı, inversePrecedence, failFast, Node 22/24 matrix'i ve IIS için app_offline.htm yapısı.
Jenkins ile Angular Pipeline: Node Container, npm Cache, Headless Test ve stash/unstash
Angular 22 uygulamasını node:24 container'ında npm ci, ng lint, Vitest ve ng build ile .NET API'yle paralel build edip stash/unstash ile tek pakette birleştiriyoruz. npm cache volume'ü, Vitest'in JUnit reporter'ı, budget'lar, browser modu için eksik paket hatası, 329 MB'lık node_modules'ü stash etmemek ve Pipeline Graph View'da paralel stage süreleri.
Jenkins ile .NET Pipeline: dotnet SDK Container'ı, Test Sonuçları, Coverage ve Publish Artifact'ı
Bookstore.Api'yi .NET SDK container'ında restore, build, test ve publish edip JUnit raporunu, Cobertura coverage'ı ve fingerprint'li artifact'ı Jenkins'e kaydediyoruz. NuGet cache volume'ünün izin hatası ve kazandırdığı süre, .NET 10'da Microsoft.Testing.Platform ile xUnit v3'ün JUnit çıktısı, coverage quality gate'i ve test raporu bulunamayınca kırmızıya dönen build.
Jenkins Multibranch Pipeline ve GitHub Entegrasyonu: Webhook, PR Build'leri ve Status Check
Multibranch pipeline her branch ve PR için otomatik job açar; webhook ile saniyeler içinde build başlar, sonuç commit'e status check olarak döner. Branch source trait'leri, webhook'un localhost URL'i ve Gitea'nın SSRF engeline takılması, when ile branch/PR ayrımı, fork PR'ında Jenkinsfile'ın base branch'ten okunması, required check ve PAT yerine GitHub App.
Jenkins Credentials: withCredentials, Credential Binding ve Groovy String Interpolation Tuzağı
Secret'ı credentials() veya withCredentials ile en dar scope'ta açar, sh adımında tek tırnakla shell değişkeni olarak okursun; çift tırnakla Groovy interpolation process'e sızdırır. Credential türleri ve SYSTEM/GLOBAL/folder scope'ları, JCasC'de readFile, masking'in base64'ü yakalayıp parçayı kaçırması, sshagent, folder credential ile ekip izolasyonu ve harici secret store'lar.
Jenkins Agent'ları: SSH Agent, Inbound Agent, Label'lar ve Docker Container'da Build
SSH agent'ta bağlantıyı controller, inbound agent'ta agent açar; build'i label expression'larla seçtiğin agent'ta ya da agent { docker } ile SDK container'ında koşturursun. JCasC ile agent tanımı, gerçek SSH ve WebSocket bağlantı log'ları, Docker Pipeline'ın workspace mount'u ve uid 1000 ayrıntısı, cleanWs ile disk, Kubernetes pod template ve Windows agent'a kısa bakış.
Jenkinsfile ile İlk Pipeline: Declarative Syntax, stages, steps, post ve environment
Jenkinsfile, pipeline'ı kodla aynı repository'de tarif eder; Declarative syntax'ta agent, stages ve steps iskeletin kendisi, environment, options, parameters, triggers ve post ise davranışı belirler. Linter çıktısı, tırnak kuralı, ilk build'de shell'e boş gelen parametre, when ile atlanan stage, Snippet Generator ve Replay, Scripted Pipeline ve NotSerializableException ile @NonCPS.
Jenkins Kurulumu: Docker ile LTS, Java 21, İlk Admin ve Plugin Seçimi
Jenkins'i Docker'da sürümü sabit bir LTS image'ı, isimli bir JENKINS_HOME volume'ü ve Java 21 ile kurarsın; setup wizard'ı plugins.txt ve JCasC ile atlarsın. Anonim volume tuzağı, initialAdminPassword, Docker-in-Docker'ın TLS sertifika hatası, anonymous erişim, controller'da sıfır executor, CSRF crumb'ı, agent → controller security ve Linux paketiyle kurulum.
Jenkins Nedir? Controller, Agent, Executor ve Ne Zaman GitHub Actions Yerine Jenkins
Jenkins, işleri planlayan bir controller ile build'leri executor'larında koşan agent'lardan oluşan self-hosted bir CI/CD sunucusudur. Hudson'dan bugüne geçmişi, workspace ve label kavramları, eşleşmeyen label'ın build'i nasıl queue'da beklettiği, plugin ekosisteminin bedeli, Freestyle ve Pipeline, LTS ve weekly hattı ve Jenkins'in GitHub Actions'a göre ne zaman doğru seçim olduğu.