Özel GitHub eylemi oluşturma
GitHub Actions, koddan buluta, kendi deponuzun rahatlığından ve rahatlığından geçmenize yardımcı olan güçlü bir özelliktir. Burada, farklı GitHub eylemleri türleri ve özel GitHub eylemleri oluşturmak için meta veriler, söz dizimi ve iş akışı komutları hakkında bilgi edineceksiniz.
GitHub eylem türleri
Eylemler, geliştirme iş akışlarınızı özelleştirmek için kullanabileceğiniz tek tek görevlerdir. Özel görevleri gerçekleştirmek için deponuzla etkileşim kuran özel kod yazarak veya GitHub topluluğunun paylaştığı eylemleri kullanarak kendi eylemlerinizi oluşturabilirsiniz. Çeşitli eylemlerde gezinirken üç farklı eylem türü olduğunu fark edeceksiniz: Docker kapsayıcı eylemleri, JavaScript eylemleri ve bileşik çalıştırma adımları eylemleri. Şimdi her eylem türüne daha yakından bakalım.
Docker kapsayıcı eylemleri
Docker kapsayıcıları, ortamı GitHub Actions koduyla paketler. Bu, tüm bağımlılıkları bu kapsayıcı içinde olduğundan eylemin tutarlı ve güvenilir bir ortamda çalıştığı anlamına gelir. Eylemin belirli bir ortam yapılandırmasında çalıştırılması gerekiyorsa, işletim sistemini ve araçları özelleştirebileceğiniz için Docker kapsayıcıları iyi bir yoldur. İşin dezavantajı, işin kapsayıcıyı oluşturması ve alması gerektiğinden Docker kapsayıcı eylemlerinin genellikle JavaScript eylemlerinden daha yavaş olmasıdır.
Docker kapsayıcı eylemi oluşturmadan önce, ortam değişkenlerini ve Docker kapsayıcısı dosya sistemini kullanma hakkında temel bilgilere sahip olmanız gerekir. Docker kapsayıcı eylemi oluşturmak için atılması gereken adımlar çok az ve basittir:
- Docker görüntüsünü derleme komutlarını tanımlamak için bir
Dockerfileoluşturun. - Eylemin girişlerini ve çıkışlarını tanımlamak için bir
action.ymlmeta veri dosyası oluşturun.runs: using:değerini olarak,dockerdeğeriniruns: image:Dockerfileise dosyasında olarak ayarlayın. - Docker görüntüsünü açıklamak için bir
entrypoint.shdosya oluşturun. - Aşağıdaki dosyalarla eyleminizi işleyin ve GitHub'a gönderin:
action.yml,entrypoint.sh,DockerfileveREADME.md.
JavaScript eylemleri
JavaScript eylemleri doğrudan çalıştırıcı makinesinde çalıştırılabilir ve eylem kodunu eylemi çalıştırmak için kullanılan ortamdan ayırabilir. Bu nedenle eylem kodu basitleştirilmiştir ve Docker kapsayıcısı içindeki eylemlerden daha hızlı yürütülebilir.
Paketlenmiş JavaScript eylemleri oluşturma ve kullanma önkoşulu olarak npm içeren Node.js indirmeniz gerekir. İsteğe bağlı bir adım olarak (ancak önerdiğimiz bir adım), JavaScript eylemlerini daha tutarlı bir şekilde hızla oluşturmanıza olanak tanıyan Node.js paketlerden oluşan bir koleksiyon olan GitHub Actions Toolkit Node.js kullanmaktır.
JavaScript eylemi oluşturma adımları çok az ve basittir:
- Eylemin girişlerini ve çıkışlarını tanımlamak için bir
action.ymlmeta veri dosyası oluşturun ve eylem çalıştırıcısına bu JavaScript eylemini çalıştırmaya nasıl başlayacağını söyleyin. - Toolkit paketleri, yönlendirme ve eylemin diğer işlevleri hakkında bağlam bilgilerini içeren bir
index.jsdosya oluşturun. - Eyleminizi şu dosyalarla işleyin ve GitHub'a gönderin:
action.yml,index.js,node_modules,package.json,package-lock.jsonveREADME.md.
Bileşik çalıştırma adımları eylemleri
Bileşik çalıştırma adımları eylemleri, kabuk betiklerini kullanarak eylemleri yeniden kullanmanıza olanak sağlar. Aynı eylem içinde birden çok kabuk dilini bile karıştırabilirsiniz. Birkaç görevi otomatikleştirmek için çok sayıda kabuk betikleriniz varsa, artık bunları kolayca bir eyleme dönüştürebilir ve farklı iş akışları için yeniden kullanabilirsiniz. Bazen javascript kullanmak veya kodunuzu docker kapsayıcısında sarmalamaktansa kabuk betiği yazmak daha kolaydır.
Paketlenmiş bileşik eylem
Paketlenmiş bileşik eylemler birden çok adımı yeniden kullanılabilir bir ünitede paketler. Bu eylemler bir depoda tanımlanır ve farklı depolardaki iş akışlarında başvurulabilir. Bileşik eylemi paketlemek iş akışlarını basitleştirir, yinelemeyi azaltır ve sürdürülebilirliği artırır.
Paketlenmiş bileşik eylem oluştururken adımlar tek action.yml bir dosyada tanımlanır. Bu dosya, girişleri, çıkışları ve yürütülecek komut veya eylemlerin sırasını belirtir. Paketlenmiş bileşik eylemler, yinelenen görevleri otomatikleştirmek veya birden çok kabuk komutunu tek bir yeniden kullanılabilir eylemde birleştirmek için özellikle yararlıdır.
Bileşik qction oluşturma
1. Bileşik eylem için dizin ayarlama
Bileşik eyleminizi deponun içindeki kendi dizinine yerleştirmeniz gerekir.
Örnek dizin yapısı:
.github/actions/my-composite-action/
├── action.yml
└── scripts/
└── my-script.sh
2. Dosyayı tanımlama action.yml
my-composite-action dizininde bir action.yml dosya oluşturun.
name: "My Composite Action"
description: "A reusable composite action that checks out code and sets up Node.js"
inputs:
node-version:
description: "The Node.js version to use"
required: true
runs:
using: "composite"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
Not: using: "bileşik" alanı, bu eylemin bileşik bir eylem olduğunu gösterir.
3. İş akışında bileşik eylemi kullanma
Bileşik eylem oluşturulduktan sonra GitHub Actions iş akışında bu eyleme başvurulabilir.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Use my composite action
uses: ./.github/actions/my-composite-action
with:
node-version: '18'
Bileşik eyleminiz başka bir depodan paylaşılıyorsa şu şekilde başvuruda bulunabilir:
uses: owner/repository/.github/actions/my-composite-action@v1
Bileşik eyleme çıkış ekleme
Bileşik eylemler, iş akışlarının adımlar veya işler arasında veri geçirmek için kullanabileceği çıkışları tanımlayabilir. Çıkışlar, sonuçları veya hesaplanan değerleri bir eylemden diğerine paylaşmak için özellikle yararlıdır.
Aşağıdaki örnekte, bileşik bir eylemde çıkışın nasıl tanımlanacağı ve kullanılacağı gösterilmektedir:
'de çıkış tanımlama action.yml
action.yml dosyası script-result adlı bir çıktı belirtir. Bu çıkış, değerini adımın resultrun-script çıkışından alır. Adım, run-script çıkış değerini ayarlamak için bir Bash komutu çalıştırır.
outputs:
script-result:
description: "Result from the script"
value: ${{ steps.run-script.outputs.result }}
runs:
using: "composite"
steps:
- id: run-script
run: echo "result=Success" >> $GITHUB_OUTPUT
shell: bash
Çıkışı bir iş akışında kullanma
Bileşik eylem oluşturulduktan sonra, bir iş akışında onun çıkışına erişilebilir. İşte bir örnek:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Run composite action
id: my-action
uses: ./.github/actions/my-composite-action
- name: Display result
run: echo "Script Result: ${{ steps.my-action.outputs.script-result }}"
Bu örnekte:
- Bileşik eylem anahtar sözcüğü kullanılarak çağrılır
uses. - Söz dizimini kullanarak çıkışa
script-resulterişinsteps.<step-id>.outputs.<output-name>. - Sonucu iş akışı günlüklerinde görüntüleyin.
Yeniden kullanılabilir ve modüler iş akışları oluşturmak için bileşik eylemlerde çıkışları tanımlayın. Bu yaklaşım veri paylaşımını basitleştirir ve sürdürülebilirliği artırır.
Bileşik eylemler için en iyi yöntemler
| En İyi Yöntem | Açıklama |
|---|---|
| Sürüm Oluşturmayı Kullanın | Kararlı sürüm 1'e başvurmak için bir v1 etiket kullanın. |
| Eylemleri Modüler Tut | Bileşik eylem içinde ilgili adımları gruplandırma. |
| Belge Girişleri ve Çıkışları | içindeki action.ymlgirişler/çıkışlar için açıklamalar ekleyin. |
| Yayımlamadan Önce Test Et | Test deposunda bileşik eylemi doğrulayın. |
İş akışındaki bileşik eylem
Bileşik eylemler, birden çok adımı yeniden kullanılabilir bir ünitede birleştirerek iş akışlarını basitleştirmenin güçlü bir yoludur. Bu eylemler tek action.yml bir dosyada bir dizi komut veya eylem tanımlamanıza olanak tanıyarak mantığı iş akışlarında korumanızı ve yeniden kullanmanızı kolaylaştırır.
Bileşik eylemlerin avantajları:
- Yeniden kullanılabilirlik - Eylemleri bir kez tanımlayın ve birden çok iş akışında kullanın.
- Bakım - Tek bir eylemde mantığı merkezileştirerek yinelemeyi azaltın.
- Modülerlik - Birden çok kabuk komutunu veya diğer eylemleri tek bir ünitede birleştirin.
GitHub Actions çalıştırıcılarında bir CLI ayarlamak için bir eylem geliştirin
Birçok CI/CD iş akışı, bulut hizmetleriyle etkileşime geçmek, altyapıyı yönetmek veya betikleri yürütmek için CLI aracının belirli bir sürümünü gerektirir. GitHub'da barındırılan çalıştırıcılar birçok araçla önceden yüklenmiş olarak gelse de, özellikle eski veya desteklenmeyen bir sürüm olduğunda iş akışınızın tam olarak ihtiyaç duyduğu sürümü içermeyebilirler. Gerekli CLI sürümünü her iş akışına yüklemek yerine aşağıdakiler için yeniden kullanılabilir bir GitHub Eylemi oluşturabilirsiniz:
- İşler arasında gerekli CLI sürümünün tutarlı bir şekilde yüklenmesini sağlar.
- Yükleme mantığını merkezileştirerek iş akışlarını basitleştirir.
- Daha hızlı iş akışı yürütme için önbelleğe almayı iyileştirir.
CLI kurulum eylemi geliştirme
CLI kurulum eylemi, GitHub çalıştırıcıya CLI yükleyen ve yapılandıran JavaScript tabanlı bir eylemdir.
Eylemi oluşturma adımları:
1. Adım: Eylem Dizinini Ayarlama
CLI kurulum eyleminizin dizinini el ile oluşturmak için şu adımları izleyin:
- Deponuza gidin veya erişin
Eylem için yeni bir dizin oluşturma
klasörün içindemy-cli-actionadlı.github/actionsyeni bir dizin oluşturun. Bu, eyleminizin düzenli olmasını sağlar ve özel eylemler için GitHub'ın önerilen yapısına uyar.Yeni dizine gitme
Eyleminiz için dosya eklemeye başlamak için yeni oluşturulan dizine geçin:Dizin yapısını doğrulama
Dizini oluşturduktan sonra depo yapınız şu şekilde görünmelidir:
your-repository/
├── .github/
│ ├── actions/
│ │ ├── my-cli-action/
Artık CLI kurulum eyleminiz için action.yml dosyasını ve diğer gerekli dosyaları oluşturmaya devam etmeye hazırsınız.
2. Adım: action.yml meta veri dosyasını tanımlama
Eylemi açıklamak için bir action.yml dosyası oluşturun.
name: "Setup MyCLI"
description: "Installs MyCLI and adds it to the PATH"
author: "Your Name"
inputs:
version:
description: "The CLI version to install"
required: false
default: "latest"
runs:
using: "node16"
main: "index.js"
Neden node16'yı kullanmak? Bu eylem JavaScript kodunu Node.js 16 kullanarak çalıştırır.
3. Adım: CLI'yi yüklemek için JavaScript betiği oluşturma
Aynı dizinde index.js adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:
const core = require('@actions/core');
const { execSync } = require('child_process');
async function run() {
try {
const version = core.getInput('version') || 'latest';
console.log(`Installing MyCLI version: ${version}...`);
execSync(`curl -fsSL https://cli.example.com/install.sh | sh`, { stdio: 'inherit' });
console.log("MyCLI installed successfully.");
} catch (error) {
core.setFailed(`Installation failed: ${error.message}`);
}
}
run();
Yukarıdaki JavaScript kodu, giriş olarak belirtilen CLI sürümünü almak için core.getInput() kullanır. Ardından CLI'yi indirip yüklemek için bir curl komutu yürütür. Yükleme işlemi başarısız olursa, eylem iş akışını başarısız olarak işaretlemek için core.setFailed() kullanır.
4. Adım: Eylemi yerel olarak test edin
Eylemi bir iş akışında kullanmadan önce GitHub tarafından barındırılan bir çalıştırıcıda test edin.
Deponuzda bir iş akışı dosyası (.github/workflows/test.yml) oluşturun:
name: Test MyCLI Setup
on:
push:
branches:
- main
- feature/*
1. İş akışını tetikleme
İş akışı, ana dala ve özellik/* desenine uyan herhangi bir dala yapılan gönderimlerde tetiklenir. Bunu, deponuzun dallanma stratejisiyle eşleşecek şekilde ayarlayabilirsiniz.
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
2. Depoyu kopyalama
Actions/checkout@v4 eylemi, deposunu taşıyıcıya kopyalamak için kullanılır. Bu, iş akışının deponun dosyalarına erişmesini sağlar.
- name: Install MyCLI
uses: ./.github/actions/my-cli-action
with:
version: '1.2.3'
3. Özel eylemi çalıştırma
Kullanım alanları: ./.github/actions/my-cli-action satırı özel eyleme yerel olarak başvurur. Eylem dizininin ve action.yml dosyasının doğru ayarlandığından emin olun. Sürüm girişi yüklenecek CLI sürümünü belirtir; bu durumda sürüm 1.2.3.
- name: Verify CLI Installation
run: |
echo "Checking MyCLI version..."
mycli --version
4. CLI yüklemesini doğrulama
Bu adım, CLI'nın başarıyla yüklendiğini doğrulamak için bir kabuk komutu çalıştırır. Mycli --version komutunu çalıştırarak yüklü CLI sürümünü denetler.
Yerel olarak test et
Bu iş akışını yerel olarak test etmek için CLI aracını kullanın act :
act -j test
Bu, yerel makinenizdeki GitHub Actions ortamının benzetimini yaparak değişiklikleri göndermeden önce iş akışında hata ayıklamanıza ve doğrulamanıza olanak tanır.
İyileştirme ipucu: Önbelleğe alma
İş akışı performansını geliştirmek için şu eylemi kullanarak CLI yükleme dizinini önbelleğe alın actions/cache :
- name: Cache MyCLI
uses: actions/cache@v4
with:
path: ~/.mycli
key: mycli-${{ runner.os }}-${{ inputs.version }}
Bu, sonraki çalıştırmaların önbelleğe alınmış CLI yüklemesini yeniden kullanmasını sağlayarak kurulum süresini kısaltır.
CLI kurulum eylemleri için en iyi yöntemler
| En iyi yöntem | Açıklama |
|---|---|
| Sürüm Oluşturmayı Kullanın | Kullanıcıların inputs.version aracılığıyla bir CLI sürümü belirtmesine izin verin. |
| Hataları Düzgün İşle | Hatalarda çıkmak için core.setFailed() kullanın. |
| Önbellek CLI Yüklemesi | İş akışı performansını actions/cache kullanarak optimize edin. |
| Belge Sağla |
README.md içindeki kullanımı ve girişleri açıklayın. |
JavaScript eylemleriyle ilgili sorunları giderme
JavaScript tabanlı GitHub Actions ile çalışırken, iş akışı yürütme sırasında beklenmeyen davranış, hata veya hatalarla karşılaşabilirsiniz. Bu ünitede JavaScript eylemlerinizdeki sorunları tanımlamanıza ve çözmenize yardımcı olacak teknikler ve araçlar sağlanır.
Yaygın sorun giderme senaryoları
| Sorun | Olası nedeni | Önerilen düzeltme |
|---|---|---|
| Eylem yığın iziyle başarısız oluyor |
index.js içinde söz dizimi hatası veya çalışma zamanı hatası |
Günlükleri kontrol et ve console.log() kullan |
Girişler şunlardır: undefined |
Yanlış giriş adı veya eksik giriş |
action.yml ve girişlerin nasıl geçirildiğini doğrula |
| Ortam değişkenleri ayarlanmadı |
core.exportVariable veya process.env düzgün kullanılmamış |
Değişkenlerin kod ayarını gözden geçirin |
| Dosya bulunamadı | Eksik göreli yollar | Dosyaların yollarını veya tam yollarını kullanma __dirname |
| Önbellek geri yüklenmedi | Yanlış key veya path değerler |
Önbellek yapılandırmasını ve anahtarlarını denetleme |
Hata Ayıklama için Loglamayı Kullanma
Log mesajlarını core.info, core.debug ve console.log ile kaydet
const core = require('@actions/core');
core.info("This is an info message");
core.debug("This is a debug message");
console.log("This is a raw console log");
✅ Hata ayıklama günlükleri için core.debug kullanın; bunlar yalnızca ACTIONS_STEP_DEBUG true olarak ayarlandığında görünür.
Hata ayıklama kaydını etkinleştir.
Aşağıdaki gizli diziyi ayarlayarak adım düzeyi hata ayıklama günlüklerini etkinleştirebilirsiniz:
ACTIONS_STEP_DEBUG=true
Çalıştırıcı tanılama günlüklerini etkinleştirmek için şunları ayarlayın:
ACTIONS_RUNNER_DEBUG=true
Hata ayıklama için sırları ayarlama
- GitHub deponuza gidin.
- Ayarlar>Gizli ve değişkenler>Eylemler bölümüne gidin.
- Aşağıdaki ad ve değerlerle yeni gizli anahtarlar ekleyin:
-
ACTIONS_STEP_DEBUG:
true -
ACTIONS_RUNNER_DEBUG:
true
-
ACTIONS_STEP_DEBUG:
İş akışı günlüklerini inceleme
bir iş akışı başarısız olduğunda, Eylemler sekmesinde başarısız olan işe tıklayın. Her adımı şu şekilde genişletin:
- Ayrıntılı günlükleri görüntüleme
- Standart çıkışı kontrol et (stdout)
- Betiklerin çıkış koduna bakın
- İşlenmeyen özel durumları tanımlama
🔍 Örnek günlük Çıktısı
Error: Cannot find module '@actions/core'
Require stack:
- /home/runner/work/_actions/my-org/my-action/index.js
✅ Düzeltme: npm yükleme @actions/core ve işleme node_modules çalıştırın (veya eylemi paketlemek için ncc kullanın).
Eyleminizi yerel olarak test edin
GitHub Actions'ı yerel olarak çalıştırmak için bir CLI aracı olan act komutunu kullanın. Örnek:
act -j test
🛠 Yerel olarak test ederken GitHub ortamınızın benzetimini düzgün yaptığınızdan emin olun.
Hataları zarifçe işleme
Özel durumları yakalayın ve yararlı mesajlarla hata verin.
try {
// your logic
} catch (error) {
core.setFailed(`Action failed with error: ${error.message}`);
}
🔁 Bu, GitHub'ın iş akışını hatayla durdurmasını ve okunabilir günlükler sağlamasını sağlar.
JavaScript eylemlerini hata ayıklamaya yönelik en iyi yöntemler
| Egzersiz | Açıklama |
|---|---|
| core.debug() kullanma | Hata ayıklama etkinleştirilmediği sürece ayrıntılı günlükleri gizleyin. |
| action.yml'i doğrula | Girişlerin ve çıkışların doğru tanımlandığından emin olun. |
| Paket kodu | JavaScript'i tek bir dosyada derlemek için kullanın @vercel/ncc . Bu, bağımlılıkları azaltır ve gerekli tüm modüllerin dahil edilmesini sağlayarak eksik dosyaların neden olduğu çalışma zamanı hatalarını önler. |
| Eylemle test etme | Simülasyon, daha hızlı yinelemeler için yerel olarak çalışır. |
| Try/catch yapısını kullan | İş akışlarının sessizce başarısız olmasını önleyin. |
Docker kapsayıcısı eylemleriyle ilgili sorunları giderme
Docker kapsayıcı eylemleri, GitHub Actions iş akışlarında karmaşık araçları ve ortamları kapsüllemek için güçlüdür. Ancak bu eylemlerin hatalarını ayıklamak, yalıtılmış çalışma zamanı ortamları nedeniyle JavaScript eylemlerinden daha zor olabilir. Bu ünite docker tabanlı eylemlerle ilgili sorunları tanımlama, tanılama ve çözme konusunda size yol gösterir.
Docker kapsayıcı eylemlerindeki yaygın sorunlar
| Sorun | Nedeni | Önerilen düzeltme |
|---|---|---|
| Eylem başlatılamıyor |
ENTRYPOINT veya CMD yanlış yapılandırılmış |
Dockerfile'ın doğru kullandığını ENTRYPOINT onaylayın |
| Eksik bağımlılıklar | Bağımlılıklar yüklenmedi veya yanlış yapılandırılmadı | Görüntüde tüm paketlerin yüklü olduğundan emin olun |
| Girişler alınmaz |
INPUT_ ortam değişkenlerine erişilmedi |
Kullan process.env.INPUT_<INPUT_NAME> (veya kabuk eşdeğeri) |
| Dosya bulunamadı | Kapsayıcı içinde yanlış dosya yolu | Mutlak yolları kullanma veya dizin yapısını doğrulama |
| İzin reddedildi | Dosya veya betiğin yürütme izni yok | Dockerfile'a ekle RUN chmod +x <script> |
| Ağ ile ilgili hatalar | Dış hizmetler erişilebilir değil | Ağ ayarlarını doğrulama ve mantığı yeniden deneme |
Docker eylem yaşam döngüsünü anlama
Sorun gidermeden önce Docker kapsayıcı eylemlerinin nasıl çalıştığını anlamak yararlı olur.
1. İş Akışı Tetikleyicisi
GitHub Actions iş akışı push gibi, pull_request veya el ile workflow_dispatch olarak yapılandırılmış bir olaya yanıt olarak başlar.
2. Çalıştırıcı Kurulumu
GitHub, iş akışını yürütmek için yeni bir sanal makine ( çalıştırıcı) sağlar. Çalıştırıcı, eylem tanımlarını indirerek ve bağımlılıkları çözerek ortamı hazırlar.
3. Eylem Çözümlemesi
Eğer eylem dosyasında runs.using: docker belirtiliyorsa, GitHub bunu Docker tabanlı bir eylem olarak tanır.
4. Görüntü Derleme veya Çekme
GitHub, eylemin Dockerfile içinde tanımlanan Docker görüntüsünü oluşturur veya belirtilirse önceden oluşturulmuş bir görüntüyü çeker. Bu görüntü, eylem kodunun çalıştığı ortamı tanımlar.
5. Kapsayıcı Çalıştırma
Çalıştırıcı, Docker kapsayıcısını başlatır, çalışma alanını bağlar ve iş akışında tanımlanan gizli bilgiler ve girdiler dahil olmak üzere ortam değişkenlerini enjekte eder.
6. Giriş Noktası Çalıştırmaları
GitHub, Dockerfile dosyasındaki entrypoint komutunu kapsayıcı içinde çalıştırır. Burası, özel eylem mantığının çalıştığı yerdir( genellikle bir betik veya uygulamadır).
7. Sonuç İşleme
Kapsayıcının ayarladığı tüm çıkışlar çalıştırıcı tarafından alınır ve iş akışındaki sonraki adımlara geçirilir. İşlem tamamlandıktan sonra kapsayıcı kapatılır ve çalıştırıcı devre dışı bırakılır.
Not: Docker kapsayıcı eylemleri temiz, yalıtılmış bir ortamda çalışır. Dosya sistemi durumu, yüklü araçlar ve ortam değişkenlerinin tümü Dockerfile içinde tanımlanmalıdır.
Hata ayıklama teknikleri
1. Kaydetme Ekle
Giriş noktası betiğinizde echo, printf veya logging deyimlerini kullanın:
echo "Starting Docker action..."
echo "Input VALUE: $INPUT_VALUE"
Hatanın oluştuğu yeri tanılamak için tüm kritik girişleri ve adımları günlüğe kaydedin.
2. Yerel olarak derleyip test et
Kapsayıcı davranışının benzetimini yapmak için makinenizde Docker kullanın:
docker build -t my-action .
docker run -e INPUT_NAME=value my-action
Ortam değişkenlerinin GitHub kümelerini taklit etmesini sağlayın.
3. GitHub iş akışlarının benzetimini yapmak için cli eylemini kullanın
GitHub iş akışlarınızı yerel olarak çalıştırmak için act'i yükleyin:
act -j test-job
GitHub'a göndermeden iş akışlarında Docker eylemlerini test etmek için mükemmeldir.
4. Dockerfile yapılandırmasını doğrulama
ENTRYPOINT veya CMD tanımladığınızdan emin olun. Betiklerinizi görüntüye kopyalayın ve yürütme izni verin:
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
5. GitHub günlüklerini inceleme
Başarısız bir iş akışı çalıştırması öğesine tıklayın, her adımı genişletin ve şunları inceleyin:
- Docker derleme günlükleri
- Konteynerden standart çıkış ve standart hata
- Çıkış kodları ve yığın izlemeleri Günlükler 🔍 genellikle eksik paketleri, söz dizimi sorunlarını veya izin hatalarını gösterir.
Örnek: Giriş noktası hatası
Error: container_linux.go:380: starting container process caused "exec: \"/entrypoint.sh\": permission denied"
✅ Düzeltme: Dockerfile'ınıza RUN chmod +x /entrypoint.sh ekleyin.
Ortam değişkeni eşlemesi
| GitHub girişi | Docker ortam değişkeni |
|---|---|
with: name: test |
INPUT_NAME=test |
GITHUB_WORKSPACE |
Şuraya eşlendi /github/workspace |
GITHUB_EVENT_NAME |
İş akışını tetikleyen olay |
echo "Input was $INPUT_NAME"
echo "Working dir: $GITHUB_WORKSPACE"
Sorun giderme sırlarını kullanın
Deponuza veya kuruluşunuza bu gizli anahtarları ekleyerek ek günlüğe kaydı etkinleştirin.
| Gizli | Açıklama |
|---|---|
ACTIONS_STEP_DEBUG |
Hata ayıklama günlüğünü etkinleştirir |
ACTIONS_RUNNER_DEBUG |
Çalıştırıcı tanılamasını etkinleştirir |
Docker eylemi hata ayıklama için en iyi yöntemler
| En İyi Yöntem | Neden |
|---|---|
| Günlüğü cömertçe kullanma | Hata noktalarını izlemeye yardımcı olur |
| Her zaman chmod +x'i ayarla | Kabuk betiklerinde izin hatalarından kaçının |
| Betiğinizdeki girişleri doğrulayın | Eksik veya hatalı biçimlendirilmiş girişleri erken yakalama |
| Kapsayıcı bağımlılıklarını en aza indirme | Daha küçük görüntülerin hatalarını ayıklamak daha kolaydır |
| Docker çalıştırarak veya act ile yerel olarak test edin | Daha hızlı yinelemeler ve anında geri bildirim |