uEngine4 – GitHub Actions

Evet sevgili yazılımperver dostlarım son güncellemem ile birlikte, uEngine4 motorumuz da artık Github Actions marifeti ile CI/CD üzerinden otomatik olarak oluşturulabilmekte. Bir kaç yazı öncesinde, Github Actions’I kendi uygulamalarınızda da kullanabilmeniz için örnek betikleri şablon projeme eklemiştim. Aşağıda ilgili repoya ve yazıma ulaşabilirsiniz:

uEngine 4 Son Güncellemeler – II

uEngine4’e de bu yeteneği kazandırmış bulunuyorum. Daha önce Azure Devops, gitlab, jenkins ve appvayeour’dan birini kullandıysanız, Github Actions da aslında bunlardan çok farklı değil. En önemli özelliği ise, Github ile sunuluyor olması (aslında bir benzeri gitlab repoları için de uzun bir süredir sunulmaktaydı).

Peki, GitHub Actions ile sağlanan CI/CD de ne diyor olabilirsiniz. Aslında temelde, Sürekli Entegrasyon (CI), kodunuzda yapmış olduğunuz değişiklikler sonrasında yazılım bileşenleriniz/uygulamanın halen derlenebilir/kullanılabilir durumda olduğunu gösteren, eğer bir sıkıntı var ise de hızlıca bunu ortaya koymak için kullanılan yöntemdir. Sürekli Teslimat (CD) ise, sürekli entegrasyon adımları sonrasında oluşturulmuş olan yazılımı ya da yazılım parçasını, hedef ortama otomatik olarak konuşlandırmaya denilmektedir. Sizlerin de tahmin edeceği üzere, özellikle bu güncel web ve mobil yazılımlar için gömülü yazılımlara göre daha sık olmaktadır ama C++ uygulamaları için de çok güzel örnekler bulunmakta deyip hemen sizler konun detaylarını aktardığım yazıma bakmaya davet ediyorum, keza bundan sonra azcık GitHub Actions’a bakıyor olacağız.

https://www.yazilimperver.com/index.php/2021/01/25/uygulama-izleme-yazilimi-serisi-3-birim-test/

Gelelim yazımızın asıl konuğuna, Github Actions’a. Peki nedir GitHub Actions? GitHub Actions, github üzerinde konuşlandırmış olduğunuz yazılımlarınıza ilişkin otomatik iş akışları oluşturmanıza, bu vesile derleme, test ve konuşlandırmanıza yardımcı olan bir altyapıdır. Yukarıda da bahsettiğim gibi, aslında github repolarınızda bulunan projelerinize kolay bir şekilde CI/CD alt yapısı kazandıracak bir hizmettir.

Temel Kavramlar

Girizgahtan sonra şimdi temel kavramlara bakmaya başlayalım. Bu arada daha detayları ve referans aldığım kaynakları yazımın sonunda her zaman olduğu gibi paylaşacağım. Temel kavramlara, GitHub Action’ın temel bileşenlerine yönelik aşağıdaki gibi bir grafik buldum. Grafikte her bir kavram, kısaca ilgili aşamaya göre anlatılmış.

İş Akışları (Workflows)

İlk kavramımız, İş Akışları. İş akışları, belirli olaylar gerçekleştiğinde otomatik olarak çalışan bir ya da daha fazla işten oluşur. Örneğin, kod devredildiğinde (checkin), kod derlenir ve testler koşturulur. İş akışları ve diğer bileşenler YAML dosyası ile tanımlanır. Bu iş akışı, bir olay ile (event) ile tetiklenerek, tanımlanan işleri yapmaya başlar. Bir olay yanında el ile ya da tanımlanmış zamanlarda da çalıştırılabilir.
GitHub Actions için en üst seviye tanımlamalar, İş Akışları vesilesi ile .github/workflows dizini içerisinde tanımlanır. Bir GitHub reposunda birden fazla iş akışı olabilir. Bunların her bir farklı işleri içeriyor (yazılım oluşturma, test koşumu, konuşlandırma, vb.) ve farklı olaylar ile tetikleniyor olabilir. Bunun ile birlikte iş akışlarını tekrar ve bir diğerinin içerisinde kullanabilirsiniz, bu tarz detayları için https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions sayfasına göz atabilirsiniz.

Olaylar (Events)

İş akışlarının işleme başlaması için kullanılan şeylere de olay/iş akışı tetikleyicisi denir. Bunlar gerçekleştiğinde ilgili iş akışları gerçekleştirilmeye başlar. Peki bunlar ne olabilir?
• Manuel tetik,
• Zamanlanmış olaylar,
• Github reposuna dair olaylar (commit, add, pull request, vb) gibi.

Bunların detayları ve diğer tetikler için https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows sayfasına göz atabilirsiniz. Oldukça farklı ve çeşitli tetik mekanizmaları sunulmakta.

İşler (Jobs)

İş akışları ve bunları tetikleyen olaylara baktıktan sonra, iş akışları kapsamında yapılacak işlere göz atalım. Bir İş (Job), aynı Çalıştırıcıda (runner) yürütülen bir iş akışındaki bir ya da daha fazla Adımdan (step) oluşan kümeye verilen isimdir. Her bir adım ya bir shell betiğinden ya da bir aksiyondan oluşabilir. Bir iş içerisindeki adımlar verilen sırada ve diğerine bağımlı bir şekilde koşturulur.
Her bir adım aynı çalıştırıcıda (buna da yakında değineceğim) koştuğu için veriler bir adımdan diğerine paylaşılmaktadır. Örneğin bir adımda yazılımı derledikten sonra, diğer adımda oluşan çalıştırılabilir dosya ile testleri koşturabilirsiniz.
İşler birbirinden bağımsız olarak koşabildikleri gibi bir diğerine bağımlı da olabilirler. Bağımsız işler aynı zamanda paralel de koşturulabilirler. Örneğin paketleme için farklı işletim sistemleri üzerinde derleme yapan birden fazla işiniz olabilir, bunların sonuçlarını bekleyen bir işiniz olabilir ve bu da paketlemeyi yapabilir. İşlere yönelik detaylı bilgiler için https://docs.github.com/en/actions/using-jobs sayfasına göz atabilirsiniz.

Bu başlığı kapatmadan önce aksiyonlara ufak bir parantez açmak istiyorum. Aksiyonlar, Github Actions için uyarlanabilir uygulamalardır. Bunlar genel olarak bir çok iş için gerek duyulan ortak işlere yönelik tanımlanmıştır. Azure Devops’taki Task’lara benzer bir işlev görürler. Bu sayede, tekrar eden işler için halihazırdaki aksiyonları kullanabilirsiniz. Bu noktada, Github Marketplace’te bulunan bir çok aksiyona göz atılabilir ya da kendi aksiyonlarınızı tanımlıyor olabilirsiniz. Daha detaylı bilgi için https://docs.github.com/en/actions/creating-actions adresine göz atılabilir.

Çalıştırıcı (Runner)

Çalıştırıcı, basitçe iş akışlarının koşturulduğu ortam olarak düşünebilirsiniz. Bu ortam tahmin edebileceğiniz üzere sanal ya da fiziksel bir bilgisayar olabilmektedir. Azure Devops’ta agent diye isimlendirilen, gitlab’ta da yine benzer şekilde çalıştırıcı (runner olarak ifade edilmektedir).
Çalıştırıcılara, olayları/tetikleyicileri dinlerler ve tetiklendikleri anda ilgili iş akışlarını başlatırlar. Çalıştırıcıyı kullanabilmek için bir yazılım kurmanız yeterlidir.
Her çalıştırıcı aynı anda tek bir işi (job) yapar. Github’ın kendi sunduğu çalıştırıcılar yanında sizler de kendi çalıştırıcılarınızı kullanabilirsiniz. Bunun için https://docs.github.com/en/actions/hosting-your-own-runners sayfasına göz atabilirsiniz.

Evet çalıştırıcı ile birlikte aslında GitHub Actions’a ilişkin temel kavramlara bakmış olduk. Aşağıda bu kavramları gösteren başka bir figür görebilirsiniz:

Örnekler

Şimdi de GitHub Actions’ın sayfasındaki bir dosyay önce bakalım sonra da uEngine için kullandığımıza bakalım.
Daha önce de bahsettiğimiz gibi GitHub Actions iş akışını tanımlamak için YAML sentaksını kullanmakta ve bunlar ayrı dosyalar olarak tutulmaktalar.
Şimdi örnek bir iş akışı dosyasına bakacağız, detaylar için https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#create-an-example-workflow sayfasına göz atabilirsiniz. Referans alacağımız dosya şu şekilde:

Bu dosyayı, .github/workflows/ altına learn-github-actions.yaml olarak ekleyebilirsiniz. Şimdi bu adımlara, daha detaylı bakalım:

Bu iş akışı aşağıdaki gibi görselleştirilebilir:

Diagram showing the trigger, runner, and job of a workflow. The job is broken into 4 steps.

Sıra geldi, uEngine4 için kullandığımız iş akışı betiğine, hadi hızlıca ona da bakalım. Bu arada koşan uEngine4 iş akışlarına ve diğer detaylara https://github.com/yazilimperver/uEngine4/actions adresinden ulaşabilirsiniz.

Evet sevgili yazılımperver dostlarım, uzunca bir yazımın daha sonuna geldik. Bu yazı ile birlikte artık Github repolarınızı CI/CD ile tanıştırabilirsiniz.

Bir sonraki yazımda görüşmek dileğiyle, kendinize çok iyi bakın.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.