Github Actions Nedir?

Kader Miyanyedi
4 min readJul 15, 2022

--

Herkese selamlar! Bu yazımızda Github’ın bizlere sunmuş olduğu Github Actions özelliğini inceleyeceğiz.

Github Actions CI/CD süreçlerini yönetebilmemezi sağlayan bir araçtır. Github Actions özelliklerine geçmeden kısaca bir CI/CD süreçlerine göz atalım.

Yazılım geliştirme süreci, yalnızca yazılım kodunun yazılması değildir. Yazılan kodun kalitesinin kontrol edilmesi, son kullanıcıya dağıtılması gibi önemli adımları da içerir. Bu sebeple CI/CD yazılım geliştirme döngüsünün önemli bir parçasıdır.

CI (Continuous Integration): Temel amacı kod üzerinde yapılan her değişiklikten sonra sistemin derlenmesi, test edilmesi ve kodun kalite olarak ne durumda olduğunun raporlanmasıdır.

CD(Continuous Delivery): CI sürecinin devamıdır. Yazılımın otomatik olarak ortamlara dağıtılmasını içerir.

Github repolarına göz attığımızda Actions sekmesini görürüz. CI/CD sürecini yönetmek için bu sekmeyi kullanacağız.

Kendi sürecimizi oluşturmadan önce 4 temel kavramı inceleyelim.

Workflows: Bir veya birden çok işten oluşan ve bir olay tarafından tetiklenen süreçlerdir. Kısaca pastanın kendisidir :)
.github/workflows/ dizininde bir YAML dosyası kullanılarak tanımlanır.

Event: Bir iş akışının çalıştırılmasını tetikleyen etkinliklerdir. Commit atma işlemi veya pull request oluşturma işlemi eventlere örnek verilebilir. Event listesine buradan ulaşabilirsiniz.

Runner: İş akışları tetiklendiğinde çalıştırılan sunuculardır. Bir işin eylemlerini yürütür ve sonuçları githuba raporlar. Her runner aynı anda tek bir işi çalıştırabilirler.

Actions: Sıklıkla tekrarlanan görevleri içeren bir uygulamadır. Workflow dosyalarında tekrarlanan kod miktarını azaltmak için action kullanılabilir.

Marketplace’te açık olarak yayınlanan actionları kullanabilir veya kendi actionunuzu oluşturabilirsiniz. Kendi actionunuzu oluşturmak için .github/actions dizininde bir YAML dosyası tanımlayabilirsiniz.

|-- hello-world (repository)
| |__ .github
| └── workflows
| └── my-first-workflow.yml
| └── actions
| |__ hello-world-action
| └── action.yml

Örnek bir Workflow Oluşturulması

Bir workflow oluştururken ilk adım workflowu isimlendirmek ve hangi eventlerde tetikleneceğini belirtmektir. Workflowu isimlendirmek için name argümanı kullanılır.
On parametresi, workflowun tetiklendiği eventi belirtmek için kullanılır. Yukarıdaki örnekte herhangi bir issue açıldığında veya label eklendiğinde, main branche commit gönderildiğinde workflow çalışacaktır. Ancak döküman dizinine bir commit gönderildiğinde bu workflow çalışmayacaktır.

On parametresi ile ilgili daha ayrıntılı kullanıma github dökümanıdan bakabilirsiniz.

Action içindeki işleri, akışları ve adımları tanımlamak ve yönetmek için jobs argümanını kullanırız. Burada build bizim için sadece bir etikettir ve tek bir işi temsil eder. İşin hangi platformda çalışacağını belirlemek için runs-on argümanını kullanılır.

Jobs argümanı içerisindeki işler varsayılan olarak paralel çalışmaktadır. Birbirine bağlı işler için needs argümanını kullanabiliriz. Örneğin build almadan önce testlerimizin çalıştırılmasını isteyebiliriz. Bunun için needs argümanı içerisinde testin çalıştırıldığı işi vermemiz yeterli olacaktır.

Bir iş bir dizi görevden oluşmaktadır. Her bir adımı belirtmek için steps argümanı kullanılır. Adımlar komutları, kurulum görevlerini veya bir action çalıştırabilirler. Adımlara bir name verilebilir. Bu zorunlu değildir fakat konfigurasyonun okunmasını kolaylaştırmak için önemli bir noktadır.

Adımları direk komut satırında çalıştırmak için run argümanını kullanırız.

uses ile birlikte aksiyondaki adımın çalışırken ne yapacağı belirtilir. Yukarıdaki örnekte actions/setup-python@v3 kullanılarak Python kurulumu yapılacaktır. İşlemin durumuna göre bazen parametre vermemiz gerekebilir. Parametre vermek için with argümanı kullanılır.

Environment değerlerini belirtmek için env argümanı kullanılır. Action içerisinde tanımlanan bir ortam değerini kullanmak için $key_name, action dışında yer alan ortam değerlerini kullanmak için ${{key_name}} yazımı kullanılır. Özel keylerin action içerisine doğrudan konulması iyi bir yaklaşım değildir. Bu tarz keyler için github secrets sayfası kullanılabilir.

Bir django projesinde her push yapıldığında testlerin çalıştırıldığı bir workflow aşağıdaki gibi olabilir.

name: django-workflow-example
on: [push]
env:
PROJECT_NAME: Django Select Prefetch Example
jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- name: Action Information
run: echo "Project name = $PROJECT_NAME\n" \
echo "Event name = ${{github.event_name}}\n" \
echo "Repository = ${{github.repository}}\n" \
echo "Workspace = ${{github.workspace}}\n"
- name: Install Python3
uses: actions/setup-python@v3
with:
python-version: 3.9
- name: Install Dependencies
run: pip install -r requirements.txt
- name: Run Django Tests
run: python backend/manage.py test

Bir workflow çalıştığında sonuç yukarıdaki gibi olur. Workflowun başarısız olması kodlarımızı tekrar gözden geçirmemiz gerektiğini gösterir.

Bu yazıda kısaca Github Actions özelliklerine göz attık. Yazılım geliştirme yaşam döngüsünde hataları minimum düzeye indirmek ve işleri otomatize etmek için Github Actions kullanabilirsiniz. Bir sonraki yazıda görüşmek üzere^^

Kaynakça

[1] Github Actions Documentation
[2] Github Actions Environment Variables
[3] Using jobs in a workflow

--

--