Gitlab CI/CD Pipeline

.Net Core Örneği

Deniz TÜRKMEN
5 min readOct 23, 2022

Merhabalar,

Bu yazımda gitlab üzerinde CI/CD oluşturmayı inceliycez. İlk olarak tanımların ne olduğuna bakalım.

Continuous Integration ( Sürekli Entegrasyon ): Sürekli entegrasyon mimarisi yapılan değişiklikler/geliştirmeler sonucu oluşan yeni sürümün, bir boru hattı (pipeline) vasıtasıyla, mevcut sürüm ile sürekli şekilde otomatik olarak birleştirilmesini sağlar. Burada önemli olan nokta sürecin bir boru hattı (pipeline) üzerinden yürütülüyor olmasıdır.

Boru hattı (pipeline) dediğimiz şey aslında süreçleri uç uca eklemek ve ihtiyaçlarımız doğrultusunda akışlara yön vererek otomatize edilmiş bir düzen oluşturmaktır.

Continuous Delivery ( Sürekli Teslimat ) : Sürekli teslimat ise istenilen bir sürümün istenilen bir ortama elle tetiklemek suretiyle deploy edilebilmesidir. Yani biz istemedikçe deployment sağlanmaz, deployment istediğimizde süreci manuel olarak başlatırız.

Normalde ilgili bir sürümü deploy etmek için manuel gerçekleştirdiğimiz tüm adımları komut dosyaları vs. aracılığıyla otomatize ederiz.

Şimdi de örneğimize başlayalım. Bunun ilk önce bir Asp Net Core projesi açalım. NetCore adında bir klasör oluşturalım. Klasörün içerisine girip dotnet new mvc diyelim ve klaösörümüsün içine projemiz oluşturalım.

mkdir -p NetCoredotnet new mvc

Projemisin dosya yapısı aşağıdaki şekilde gösterilmiştir.

Proje Dosya Yapısı

Şimdide dosya yapısına .gitlab-ci.yml dosyasımızı ekleyelim. Basit bir CI pipiline yazalım. Pipiline içeriği aşağıda gösterilmiştir.

Yaml içeriğinden bahsetmek gerekirse;

  • image bölümümde uygulamamızı çalıştırcağımız base image’ı gösteriyoruz.
  • stages bölümünde yeni bir aşama ekliyoruz.
  • before_script bölümünde ise projemisi restore ediyoruz. Asp Net projelerinde “dotnet restore” komutu projemize ait bağımlılıkları yüklemek için kullandığımız bir komuttur. Bu sayede projemize güncel hale getirmiş oluruz. Pipelinemızı doğru bir şekilde çalışması sağlamak için önemlidir.
  • build bölümünde ise uygulamamızı build ediyoruz. Build projemizin bağımlılıkları derlediğimiz bölümdür.

Not: Projeler göre derleme, test ve restore aşamaları farklılık gösterir. Biz basit şekilde bir CI pipiline oluşturma örneği yapıyor olacağız.

Şimdi Gitlab üzerinde yeni bir repository alanı oluşturarak projemizi bu repository alanına gönderelim. Bunun için ilk olarak gitlab login olalım ve ardından NetCoreCI adından bir repository oluşturalım.

Şimdide projemize ait kodları açtığımız “NetCoreCI” repository gönderelim. Bunun için sırasıyla;

Not: Her seferinde gitlabıma bir kod gönderdiğimde kullanıcı adımı ve şifremi girmemek için bir ssh keygen oluşturdum. SSH Keygen oluştuırmak için kullanacağımız komut ,

ssh-keygen -t rsa -b 4096 -C “eposta@adresiniz.com”

terminal ekranından komutu çalıştırdıktran sonra,

cat ~/.ssh/id_rsa.pub

Bu komut çalıştırıp çıkan kodu “Gitlab Kullanıcı” adımızın olduğu yer de Preferences sekmesine tıklayarak. Sol menüdeki SSH Keys alanına ekleyelim. Bundan sonra yapacağımız her işlemde username ve password girmemize gerek kalmayacak.

Şimdide repositorymize uygulamamızı ait kodlarımızı gönderme işlemini yapalım.

Not: Yukarıda bahsettiğim “SSH Keygen” uygulamak zorunda değilsiniz ben sadece her kod günceleyip gönderdiğimde bana gitlab kullanıcı adımı ve şifremi girmemek için bu yöntemi uyguladım.

git initgit add .git statusgit commit -m “ci pipiline”git remote add origin git@gitlab.com:deniz.turkmen/netcoreci.gitgit push — set-upstream origin master
  • git init → ile .git adında bir dosya oluşturduk.
  • git add . → ile projemize ait bütün dosyaları aldık.
  • git status → ile durumunu kontrol ettik.
  • git commit →ile mesaj içeriğini belirtik.
  • git remote add → ile kodların hangi repository gideceği belirledik.
  • git push → komutu ile repository gönderme işlemi yaptık.

Şimdide Repository alanımıza bir göz atalım.

Başarılı bir şekilde repository alanımıza uygulama kodlarımızı gönderdik. Sıra geldi “CI pipelımızı” çalıştırmaya bunun için ilk önce,

Gitlab giderek sol menüden CI/CD sekmesinde pipeline alanına gidiyoruz.

CI/CD pipeline otamatileştirmek için gitlab runner aktifleştirmemiz gerekir. Bunun için, Gitlab -> Settings -> CI/CD -> Runners sekmesine gittiğimizde runner şuan aktif değil aşağıdaki şekilde görüldüğü gibi şimdi de runner aktifleştirerek CI-CD pipelanımısın otomatik olarak çalışmasını sağlayalım.

Bunun için,

# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Give it permissions to execute
sudo chmod +x /usr/local/bin/gitlab-runner
# Create a GitLab CI user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# Install and run as service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

ve

sudo gitlab-runner register --url https://gitlab.com/ --registration-token $REGISTRATION_TOKEN

komutlarını terminalden tek tek çalıştırıyoruz. Burada bilmemiz gereken tek şey $REGISTRATION_TOKEN alanına bizim kendi tokenımızı girmek olacaktır. Tokenumuza da burada yazan token alıp komutu uyguladığınız da runner otomatikleşecektir.

Çalıştırılan komutları tek bir çıktı görmek için aşağıdaki şekil’ e bakabilirsiniz.

Gitlab Runner Kurulumu

Şimdide CI/Cd pipeline baktığımızda;

CI/CD Jobs
CI/CD Build
CI/CD Pipiline

En üst satırda gözüktüğü gibi kodumuz başarılı şekilde geçmiştir.

Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler :)

--

--

Deniz TÜRKMEN
Deniz TÜRKMEN

No responses yet