Özel GitHub eylemi oluşturma

Tamamlandı

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

GitHub Actions'ın üç türünün diyagramı; Docker, JavaScript ve bileşik çalıştırma adımları eylemleri.

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:

  1. Docker görüntüsünü derleme komutlarını tanımlamak için bir Dockerfile oluşturun.
  2. Eylemin girişlerini ve çıkışlarını tanımlamak için bir action.yml meta veri dosyası oluşturun. runs: using: değerini olarak, docker değerini runs: image:Dockerfile ise dosyasında olarak ayarlayın.
  3. Docker görüntüsünü açıklamak için bir entrypoint.sh dosya oluşturun.
  4. Aşağıdaki dosyalarla eyleminizi işleyin ve GitHub'a gönderin: action.yml, entrypoint.sh, Dockerfileve README.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:

  1. Eylemin girişlerini ve çıkışlarını tanımlamak için bir action.yml meta 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.
  2. Toolkit paketleri, yönlendirme ve eylemin diğer işlevleri hakkında bağlam bilgilerini içeren bir index.js dosya oluşturun.
  3. Eyleminizi şu dosyalarla işleyin ve GitHub'a gönderin: action.yml, index.js, node_modules, package.json, package-lock.jsonve README.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

İş akışında kullanılan bileşik eylemin ekran görüntüsü.

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

Bileşik eylemde çıkış tanımlamanın ekran görüntüsü.

Çı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-result erişin steps.<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:

  1. Deponuza gidin veya erişin

JavaScript eylemi için gösterilen kök depo yapısının ekran görüntüsü.

  1. Eylem için yeni bir dizin oluşturma
    klasörün içinde my-cli-action adlı .github/actions yeni bir dizin oluşturun. Bu, eyleminizin düzenli olmasını sağlar ve özel eylemler için GitHub'ın önerilen yapısına uyar.

  2. Yeni dizine gitme
    Eyleminiz için dosya eklemeye başlamak için yeni oluşturulan dizine geçin:

  3. 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/

'.github/actions' içindeki JavaScript eyleminin dizin yapısının ekran görüntüsü.

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.

JavaScript GitHub Eylemi için YAML meta veri dosyasının ekran görüntüsü.

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.

GitHub Eyleminde index.js için JavaScript kodunun ekran görüntüsü.

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.

JavaScript GitHub Eyleminin test sonuçlarının ekran görüntüsü.

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

  1. GitHub deponuza gidin.
  2. Ayarlar>Gizli ve değişkenler>Eylemler bölümüne gidin.
  3. Aşağıdaki ad ve değerlerle yeni gizli anahtarlar ekleyin:
    • ACTIONS_STEP_DEBUG: true
    • ACTIONS_RUNNER_DEBUG: true

İş 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