CI için iş akışları oluşturmak için GitHub Actions'ı nasıl kullanabilirim?

Tamamlandı

Amacınızın kod derleme ve yayımlama işlemini otomatikleştirerek geliştiricilerin kod tabanına her değişiklik ekleyişinde özelliklerin güncelleştirilmesi olduğunu hatırlayın.

Bu işlemi uygulamak için şunların nasıl yapılacağını öğrenirsiniz:

  • Şablondan iş akışı oluşturun.
  • Yinelenmelerden kaçınmak için yeniden kullanılabilir iş akışlarını kullanın.
  • Birden çok hedefe karşı test etme.
  • Derleme ve test işlemlerini ayrı gerçekleştirin.

Şablondan iş akışı oluşturma

bir iş akışı oluşturmak için şablon kullanarak başlamak yaygın bir durum. Şablonda, uyguladığınız belirli otomasyon türü için önceden yapılandırılmış ortak işler ve adımlar vardır. İş akışları, işler ve adımlar hakkında bilgi sahibi değilseniz GitHub Actions kullanarak geliştirme görevlerini otomatikleştirme modülüne göz atın.

GitHub deponuzun ana sayfasında Eylemler'i ve ardından Yeni iş akışı'nı seçin.

İş akışı seçin sayfasında, birçok şablon türü arasından seçim yapabilirsiniz. Örneklerden biri Node.js şablonudur. Node.js şablonu Node.js ve tüm bağımlılıkları yükler, kaynak kodu oluşturur ve Node.js'in farklı sürümleri için testler çalıştırır. Python'ı ve bağımlılıklarını yükleyen ve ardından python'ın birden çok sürümünde lint de dahil olmak üzere testler çalıştıran Python paket şablonu buna bir başka örnektir.

Node.js iş akışı şablonuyla başlamak için, arama kutusuna Node.jsgirin.

Arama kutusunun vurgulandığı ve Node.jsmetninin bulunduğu GitHub Actions sekmesini gösteren ekran görüntüsü.

Arama sonuçlarında, Node.js bölmesinde Yapılandır'ı seçin.

Node.js bölmesinin vurgulandığı ve Yapılandır düğmesinin seçili olduğu GitHub Actions sekmesini gösteren ekran görüntüsü.

node.js.yml Projeniz için şablondan bir dosya oluşturulur:

name: Node.js CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Görüldüğü üzere, bu örnek iş akışı ya depoya bir gönderim yapıldığında ya da ana dalda bir çekme isteği oluşturulduğunda başlatılır.

Bu iş akışı, özniteliğiyle job gösterilen tek bir iş çalıştırır.

runs-on özniteliği, işletim sistemi için iş akışının ubuntu-latestüzerinde çalıştığını belirtir. node-version özniteliği, her biri Node.js sürüm 14.x, 16.x ve 18.x için birer tane olan üç derleme olduğunu belirtir. matrix özniteliği modülün ilerleyen bölümlerinde ayrıntılı olarak açıklanmıştır.

jobs özniteliğinde, adımlar GitHub Actions actions/checkout@v3 eylemini kullanarak kodunuzu deponuzdan sanal makineye (VM) aktarmak için ve actions/setup-node@v3 eylemi ile doğru Node.jssürümünü kurmak için kullanılır. özniteliğini kullanarak ${{ matrix.node-version }} üç Node.js sürümünü test etmek istediğinizi belirtirsiniz. Bu öznitelik, daha önce tanımladığınız matrise başvurur. cache özniteliği, varsayılan dizinde önbelleğe almak için bir paket yöneticisi belirtir.

Bu adımın son bölümü, Node.js projelerin kullandığı komutları yürütür. npm ci komutu dosyadan package-lock.json bağımlılıkları yükler. npm run build --if-present varsa bir derleme betiği çalıştırır. npm test test çerçevesini çalıştırır. Bu şablon aynı işte hem derleme hem de test adımlarını içerir.

npm hakkında daha fazla bilgi edinmek için npm belgelerine göz atın:

Bir geliştirici ekibi, yinelenen otomasyon adımlarını kolaylaştırmak ve standartlaştırmak için yeniden kullanılabilir iş akışlarını kullanma avantajından yararlanabilir. Yeniden kullanılabilir iş akışlarını kullanarak yedekliliği azaltabilir, sürdürülebilirliği artırabilir ve sürekli tümleştirme/sürekli dağıtım (CI/CD) işlem hatlarınızda tutarlılık sağlayabilirsiniz.

Yinelenmeyi önlemek için tekrar kullanılabilir iş akışlarını kullanın

Ekipler ölçeklendikçe ve projeler büyüdükçe, aynı adımların birden çok iş akışı dosyası arasında yinelenmeleri yaygın olarak görülür. Şu adımlar kod teslim alma, bağımlılık yükleme, test ve dağıtımı içerebilir. Bu tür yinelemeler yalnızca kod tabanınızı karmaşıklaştırmakla kalmaz, aynı zamanda kod değişiklikleri gerektiğinde bakım süresini de artırır. Yeniden kullanılabilir iş akışları, otomasyon mantığını bir kez tanımlamanıza ve ardından diğer iş akışlarından mantığı çağırmanıza olanak tanıyarak bu sorunu çözer.

Yeniden kullanılabilir iş akışları, programlamadaki işlevlere benzer şekilde diğer iş akışlarının çağırabileceği özel GitHub Actions iş akışlarıdır. Derleme adımları, test yordamları veya dağıtım stratejileri gibi yinelenen mantığı paylaşmak için bunları oluşturursunuz. Yeniden kullanılabilir bir iş akışı oluşturduktan sonra, bu iş akışına aynı depodaki veya farklı depolardaki diğer iş akışlarından başvurabilirsiniz.

GitHub Actions'ta yeniden kullanılabilir iş akışları kavramını gösteren diyagram. Birden çok depo veya iş akışı merkezi bir iş akışına başvurabilir.

Yeniden kullanılabilir iş akışları neden kullanılır?

Yeniden kullanılabilir iş akışlarını kullanmanın avantajları şunlardır:

  • Tutarlılık. Ekipler tüm projelerde aynı otomasyon standartlarını izleyebilir.
  • Verimlilik. Adımları kopyalayıp yapıştırmak yerine, yeniden kullanılabilir bir iş akışını işaret edersiniz.
  • Daha kolay güncelleştirmeler. Bir işlem değiştiğinde (örneğin, bir test adımı ekleyerek) bunu tek bir konumda güncelleştirirsiniz. Ardından, avantaj sağlayan iş akışını kullanan tüm iş akışları otomatik olarak faydalanır.
  • Ölçeklenebilirlik. Yeniden kullanılabilir iş akışları, birden çok hizmeti yöneten platform veya DevOps ekipleri için idealdir.

Ardından, projelerinizi geliştirmek için yeniden kullanılabilir iş akışlarının nasıl kullanılacağını keşfedin.

Yeniden kullanılabilir iş akışları uygulama

Yeniden kullanılabilir iş akışlarını kullanmak için:

  1. Depo klasörünüzde yeniden kullanılabilir bir iş akışı oluşturun. Dosya, test etme, oluşturma ve dağıtma ile ilgili yaygın adımlar gibi paylaşmak istediğiniz otomasyon adımlarını içerir.
  2. Bir iş akışını olayla workflow_call yapılandırarak yeniden kullanılabilir olmasını açıkça etkinleştirin.
  3. Ana iş akışlarınızda (çağıran iş akışları), bu yeniden kullanılabilir dosyaya başvurun ve gerekli girdileri veya sırları sağlayın.

Yeniden kullanılabilir iş akışlarının avantajlarını göstermek için aşağıdaki gerçek dünya senaryolarını göz önünde bulundurun.

Örnek

Kuruluşunuzun 10 mikro hizmeti olduğunu düşünün. 10 mikro hizmetin tümü aşağıdakiler için aynı adımlara ihtiyaç duyar:

  • Testleri çalıştırma
  • Lint kodu
  • Belirli bir ortama dağıt.

Yeniden kullanılabilir iş akışları olmadan, her depo aynı mantığı birden çok iş akışı dosyası arasında çoğaltarak yinelenen adımlara ve daha zor bakımlara yol açar.

Yeniden kullanılabilir iş akışları kullanıyorsanız:

  • İşlemi merkezi bir dosyada (örneğin, içinde ci-standard.yml) bir kez tanımlarsınız.
  • Bu dosyayı her mikro hizmetin kendi iş akışından çağırırsınız ve ortam veya uygulama adı gibi değişkenleri geçirirsiniz.

Güvenlik açıklarını taramak gibi yeni bir güvenlik adımı veya aracı eklenirse, bunu yeniden kullanılabilir iş akışına yalnızca bir kez eklersiniz. 10 mikro hizmetin tümü hemen güncelleştirilmiş işlemi kullanmaya başlar. 10 mikro hizmeti değiştirmeniz gerekmez.

Yeniden kullanılabilir iş akışlarının nasıl çalıştığını ve avantajlarını anlayarak, bunların verimliliğini en üst düzeye çıkarmak ve CI/CD işlem hatlarınızla sorunsuz tümleştirme sağlamak için en iyi yöntemleri benimseyebilirsiniz.

En iyi yöntemler

  • Yeniden kullanılabilir iş akışlarınızı ekipler arasında paylaşmayı planlıyorsanız tek bir depoda merkezileştirin.
  • İş akışlarınızı sürüme eklemek için dalları veya etiketleri kullanın (örneğin, kullanın @v1), böylece gerekirse değişiklikleri kolayca geri alabilirsiniz.
  • Girdileri ve sırları net bir şekilde belgele. Yeniden kullanılabilir iş akışları genellikle girişlere ve gizli bilgilere dayanır. Ekiplerin hangi bilgilerin kullanılacağını bilmesi gerekir.
  • Yalnızca birkaç adımı yeniden kullanmanız gerekiyorsa, yeniden kullanılabilir iş akışlarını tam iş akışı oluşturmak yerine bileşik eylemlerle birleştirin.

Yeniden kullanılabilir iş akışları, herhangi bir mühendislik ekibinde tutarlılığı zorlamanın, yinelemeyi azaltmanın ve DevOps uygulamalarını ölçeklendirmenin güçlü bir yoludur. Tek bir depo, mikro hizmet veya açık kaynak kitaplıkları yönetirken, yeniden kullanılabilir iş akışları otomasyonu basitleştirerek CI/CD'nizin daha hızlı, daha temiz ve daha kolay yönetilmesini sağlayabilir.

İş akışı şablonlarını özelleştirme

Bu modülün başında, geliştirici ekibiniz için CI'yi ayarlamanız gereken bir senaryoyu göz önünde bulundurun. Node.js şablonu harika bir başlangıçtır, ancak bunu ekibinizin gereksinimlerine daha uygun olacak şekilde özelleştirmek istiyorsunuz. farklı Node.js sürümlerini ve farklı işletim sistemlerini hedeflemek istiyorsunuz. Ayrıca derleme ve test adımlarının ayrı işler olmasını istiyorsunuz.

Özelleştirilmiş bir iş akışı örneği aşağıda verilmişti:

strategy:
  matrix:
    os: [ubuntu-latest, windows-latest]
    node-version: [16.x, 18.x]

Bu örnekte, birden çok işletim sistemi ve dil sürümü arasında test için bir derleme matrisi yapılandıracaksınız. Bu matris, her Node.jssürümüyle eşleştirilmiş her işletim sistemi için bir tane olan dört yapı üretir.

Dört yapı ve testleri büyük miktarda günlük verisi oluşturur. Hepsini sıralamak zor olabilir. Aşağıdaki örnekte, test adımını ayrılmış bir test işine taşırsınız. Bu görev birden çok hedefe karşı çalışır. Oluşturma ve test adımlarını ayırmak, log verisi ile çalışmayı kolaylaştırır.

test:
  runs-on: ${{ matrix.os }}
  strategy:
    matrix:
      os: [ubuntu-latest, windows-latest]
      node-version: [16.x, 18.x]
  steps:
  - uses: actions/checkout@v3
  - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}
  - name: npm install, and test
    run: |
      npm install
      npm test
    env:
      CI: true