GitHub Actions iş akışını yapılandırma
Burada, bir iş akışı dosyasındaki bazı yaygın yapılandırmaları öğreneceksiniz. Ayrıca olay türü kategorilerini, iş akışlarını devre dışı bırakma ve silmeyi ve en iyi güvenlik uygulamaları için eylemin belirli sürümlerini kullanmayı da keşfedersiniz.
İş akışlarını zamanlanmış olaylar için çalışacak şekilde yapılandırma
Daha önce belirtildiği gibi, iş akışlarınızı GitHub'da belirli bir etkinlik gerçekleştiğinde, GitHub dışında bir olay gerçekleştiğinde veya zamanlanmış bir zamanda çalışacak şekilde yapılandırabilirsiniz. Olay, schedulePOSIX cron söz dizimini kullanarak belirli UTC saatlerinde çalışacak bir iş akışını tetiklemenizi sağlar. Bu cron söz diziminde beş * alan vardır ve her alan bir zaman birimini temsil eder.
Örneğin, her 15 dakikada bir bir iş akışı çalıştırmak istiyorsanız, schedule olay aşağıdaki örneğe benzer olacaktır:
on:
schedule:
- cron: '*/15 * * * *'
Her Pazar saat 03:00'te schedule bir iş akışı çalıştırmak isterseniz olay şöyle görünür:
on:
schedule:
- cron: '0 3 * * SUN'
Ayrıca, bir değer aralığı belirtmek veya zamanlanmış iş akışınızı aramak için işleçleri de kullanabilirsiniz. Zamanlanmış iş akışlarını beş dakikada bir çalıştırabileceğiniz en kısa aralıktır ve bunlar varsayılan veya temel daldaki en son işlemede çalışır.
İş akışlarını el ile olaylar için çalışacak şekilde yapılandırma
Zamanlanmış olaylara ek olarak, olayı kullanarak workflow_dispatch bir iş akışını el ile tetikleyebilirsiniz. Bu olay, GitHub REST API'sini kullanarak veya GitHub'daki deponuzun Eylemlersekmesindeki İş akışını çalıştır düğmesini seçerek iş akışını çalıştırmanıza olanak tanır. Kullanarak workflow_dispatch iş akışının hangi dalda çalışmasını istediğinizi seçebilir ve GitHub'ın kullanıcı arabiriminde form öğeleri olarak sunmasını isteğe bağlı olarak inputs ayarlayabilirsiniz.
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test scenario tags'
öğesine workflow_dispatchek olarak, adlı repository_dispatchbir web kancası olayını tetikleme amacıyla GitHub API'sini kullanabilirsiniz. Bu olay, GitHub dışında gerçekleşen etkinlik için bir iş akışı tetiklemenizi sağlar. Temelde, GitHub'dan bir eylem veya web kancası dışında bir iş akışını tetiklemesini isteyen deponuza yönelik bir HTTP isteği işlevi görür. Bu el ile olayı kullanmak için iki şey yapmanız gerekir: gitHub uç noktasına POST istek gövdesinde web kancası olay adları olan bir /repos/{owner}/{repo}/dispatches istek gönderin ve iş akışınızı olayı kullanacak repository_dispatch şekilde yapılandırın.
curl \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/octocat/hello-world/dispatches \
-d '{"event_type":"event_type"}'
on:
repository_dispatch:
types: [opened, deleted]
web kancası olayları için iş akışlarını çalışacak şekilde yapılandırma
Son olarak, GitHub'da belirli web kancası olayları gerçekleştiğinde çalışacak bir iş akışı yapılandırabilirsiniz. Çoğu web kancası olayını, bir web kancası için birden fazla etkinlikten tetikleyebilirsiniz. Web kancası için birden çok etkinlik varsa, iş akışını tetikleyen bir etkinlik türü belirtebilirsiniz. Örneğin, check_run olayı için, ancak yalnızca rerequested veya requested_action etkinlik türleri için bir iş akışı çalıştırabilirsiniz.
on:
check_run:
types: [rerequested, requested_action]
Depo_Gönderimi
repository_dispatch GitHub Actions'da dış sistemlerin (hatta diğer GitHub iş akışlarının) GitHub API'sine post isteği göndererek iş akışlarını el ile tetiklemesini sağlayan özel bir olaydır.
Deponuzda iş akışları başlatması gereken dış araçlar, betikler veya sistemlerle esnek otomasyon ve tümleştirme sağlar.
Kullanım örnekleri
Harici CI/CD araçlarından iş akışlarını tetikleyin.
Çoklu depo dağıtımlarını koordine edin (örneğin, Depo A derlemeyi tamamlar → Repo B'yi tetikler).
Dış olaylara (web kancaları, izleme uyarıları, GitHub dışındaki CRON işleri) göre otomasyonu başlatın.
İş akışı yürütmelerini depolar arasında veya monorepolar içinde zincirleme gerçekleştirin.
Örnek iş akışı, repository_dispatch'ı dinler
name: Custom Dispatch Listener
on:
repository_dispatch:
types: [run-tests, deploy-to-prod] # Optional filtering
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Echo the payload
run: |
echo "Event type: ${{ github.event.action }}"
echo "Payload value: ${{ github.event.client_payload.env }}"
Önemli öğeler:
türler: İsteğe bağlı.
run-testsvedeploy-to-prodgibi özel olay türlerini tanımlar.github.event.client_payload: Gönderme olayında geçirilen diğer özel verilere erişim.
github.event.action: Gönderilen event_type'nin adı.
API aracılığıyla olayı tetikleme
GitHub REST API v3 uç noktasına bir POST isteği göndermeniz gerekir:
POST https://api.github.com/repos/OWNER/REPO/dispatches
İzin
- Depo kapsamına sahip bir kişisel erişim tokeni (PAT) gerektirir.
- Kuruluşlar için, belirtecinizin uygun erişim ayarlarına sahip olduğundan emin olun.
Örnek komut yapısı
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token YOUR_GITHUB_TOKEN" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"run-tests","client_payload":{"env":"staging"}}'
Yük yapısı
{
"event_type": "run-tests",
"client_payload": {
"env": "staging"
}
}
Parametreler
| Alan | Türü | Açıklama | Gerekli |
|---|---|---|---|
event_type |
String | Olay için özel bir ad. İş akışı tetikleyicinizdeki tür değeriyle bu ad eşleşir. | Evet |
client_payload |
nesne | İş akışına özel veri göndermek için rastgele JSON yükü (github.event.client_payload) | Hayı |
Repository_dispatch parametrelerinin dökümü
GitHub API uç noktasına POST isteğinde bulunurken iki ana parametreye sahip bir JSON gövdesi geçirmeniz gerekir:
- etkinlik_türü
- istemci_yükü
etkinlik_türü
Tanımladığınız gerekli bir özel dize. GitHub bu değeri gönderimin "eylemi" veya "türü" olarak değerlendirir. İş akışını neyin tetiklediğini belirlemek ve belirli türleri dinleyen iş akışlarını filtrelemek için kullanılır.
Biçim:
- Tür: dize
- Örnek: "deploy", "run-tests", "sync-db", "build-docker"
İş Akışında Kullan: Belirli olay türlerini dinlemek ve iş akışı içindeki değere erişmek için kullanılır. Bu, tek bir iş akışının birden çok amaçla yeniden kullanılmasına yardımcı olur ve otomasyonu daha düzenli ve olay odaklı hale getirir.
Örnek:
- name: Print event type
run: echo "Event type: ${{ github.event.action }}"
istemci_yükü
Gönderme işlemiyle birlikte özel veri göndermenizi sağlayan serbest biçimli bir JSON nesnesi. Yapıyı tanımlarsınız ve iş akışının içinden erişilebilir.
Biçim:
- Tür: object
- Özel anahtarlar ve değerler
İş Akışında Kullanım: Bu nesne, çoklu ortam dağıtımları, sürümlü yayınlar veya başka bir sistemden ya da işlem hattından bağlam aktarımı için kullanılır ve bu nesne, girdi argümanlarına benzer parametreli iş akışlarını etkinleştirir.
Örnek:
- name: Show payload values
run: |
echo "Environment: ${{ github.event.client_payload.env }}"
echo "Version: ${{ github.event.client_payload.version }}"
Örnek yük dökümü
{
"event_type": "deploy-to-prod",
"client_payload": {
"env": "production",
"build_id": "build-456",
"initiator": "admin_user",
"services": ["web", "api", "worker"]
}
}
Koşullu anahtar sözcükler kullanma
İş akışı dosyanızda bağlam bilgilerine erişebilir ve ifadeleri değerlendirebilirsiniz. İfadeler, bir adımın çalıştırılıp çalıştırılmayacağını belirlemek için bir iş akışı dosyasındaki koşullu if anahtar sözcükle yaygın olarak kullanılsa da, koşullu oluşturmak için desteklenen bağlamı ve ifadeleri kullanabilirsiniz. İş akışınızda koşullu değerleri kullanırken söz dizimini ${{ <expression> }}kullanmanız gerektiğini bilmeniz önemlidir. Bu söz dizimi GitHub'a bir ifadeyi dize olarak işlemek yerine değerlendirmesini söyler.
Örneğin, if koşulunu kullanarak github.ref (iş akışı çalıştırmasını tetikleyen dal veya etiket başvurusu) ile refs/heads/main’nin eşleşip eşleşmediğini kontrol eden bir iş akışı. Devam etmek için iş akışı şuna benzer olacaktır:
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
...
Bu örnekte söz ${{ }} diziminde öğesinin eksik olduğuna dikkat edin. Koşullu gibi if bazı ifadelerle, ifade söz dizimini atlayabilirsiniz. GitHub bu yaygın ifadelerden bazılarını otomatik olarak değerlendirir, ancak GitHub'ın otomatik olarak değerlendirdiği ifadeleri unutmanız durumunda bunları her zaman ekleyebilirsiniz.
İş akışı söz dizimi ve ifadeleri hakkında daha fazla bilgi için GitHub Actions için iş akışı söz dizimi bölümüne bakın.
İş akışlarını devre dışı bırakma ve silme
Deponuza bir iş akışı ekledikten sonra, iş akışını geçici olarak devre dışı bırakmak istediğiniz bir durumla karşılaşabilirsiniz. GitHub'da veya GitHub REST API aracılığıyla dosyayı depodan silmek zorunda kalmadan bir iş akışının tetiklenmesini durdurabilirsiniz. İş akışını yeniden etkinleştirmek istediğinizde, aynı yöntemleri kullanarak kolayca yapabilirsiniz.
Bir iş akışını devre dışı bırakmak, aşağıdaki durumlardan bazılarında yararlı olabilir:
- bir iş akışındaki bir hata, dış hizmetleri olumsuz etkileyen çok fazla veya yanlış istek üretiyor.
- Kritik olmayan ve hesabınızda çok fazla dakika tüketen bir iş akışını geçici olarak duraklatmak istiyorsunuz.
- Devre dışı olan bir hizmete istek gönderen bir iş akışını duraklatmak istiyorsunuz.
- Çatal üzerinde çalışıyorsunuz ve içerdiği bazı iş akışlarının (zamanlanmış iş akışları gibi) tüm işlevlerine ihtiyacınız yoktur.
GitHub kullanıcı arabiriminde devam eden bir iş akışı çalıştırmasını Eylemler sekmesinden veya GitHub API uç noktasını DELETE /repos/{owner}/{repo}/actions/runs/{run_id}kullanarak da iptal edebilirsiniz. Bir iş akışı çalıştırmasını iptal ettiğinizde GitHub'ın bu çalıştırmadaki tüm işlerini ve adımlarını iptal ettiğini unutmayın.
Kuruluşun şablonlu iş akışını kullanma
Bir kuruluşta birden çok ekibin kullandığı bir iş akışınız varsa, her depo için aynı iş akışını yeniden oluşturmanız gerekmez. Bunun yerine, kuruluşun deposunda tanımlanan bir iş akışı şablonu kullanarak kuruluşunuz .github genelinde tutarlılığı yükseltebilirsiniz. Kuruluştaki herhangi bir üye kuruluş şablonu iş akışını kullanabilir ve bu kuruluştaki tüm depolar bu şablon iş akışlarına erişebilir.
Bu iş akışlarını, kuruluştaki bir deponun Eylemler sekmesine gidip Yeni iş akışı'nı seçip kuruluşun " Kuruluş adıyla oluşturulan iş akışları" başlıklı iş akışı şablonu bölümünü bularak bulabilirsiniz. Örneğin, Mona adlı kuruluşun burada gösterildiği gibi bir şablon iş akışı vardır.
Eylemin belirli sürümlerini kullanma
İş akışınızdaki eylemlere başvururken, yalnızca eylemin kendisi yerine bu eylemin belirli bir sürümüne başvurmanızı öneririz. Belirli bir sürüme başvurarak eyleme gönderilen ve iş akışınızı bozabilecek beklenmeyen değişikliklere karşı bir koruma sağlarsınız. Bir eylemin belirli bir sürümüne başvurmanın birkaç yolu şunlardır:
steps:
# Reference a specific commit
- uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
# Reference the major version of a release
- uses: actions/setup-node@v1
# Reference a minor version of a release
- uses: actions/setup-node@v1.2
# Reference a branch
- uses: actions/setup-node@main
Bazı başvurular diğerlerinden daha güvenlidir. Örneğin, belirli bir dalı referans almak, bu daldaki en son değişikliklerden bu eylemi yürütür ve bunu isteyebilir veya istemeyebilirsiniz. Belirli bir sürüm numarasına başvurarak veya SHA karması işleyerek, çalıştırdığınız eylemin sürümü hakkında daha ayrıntılı bilgi edinmiş olursunuz. Daha fazla kararlılık ve güvenlik için, iş akışlarınızda yayımlanan bir eylemin işleme SHA'sini kullanmanızı öneririz.