Github Eylemlerinde manuel iş akışı tetikleyicileri


10

Bir proje deposu için Github Eylemleri ayarlıyorum.

İş akışı aşağıdaki adımlardan oluşur:

  • Liman işçisi resmi oluşturma
  • Görüntüyü kapsayıcı kayıt defterine aktarma
  • Kubernetes dağıtımını kullanıma sunma.

Ancak iki farklı Kubernetes dağıtımım var: biri geliştirme, diğeri üretim için. Bu nedenle, iki Github Action iş akışım da var.

Geliştirme için Github Eylem iş akışı, her taahhütte bulunulduğunda tetiklenir:

on:
  push:
    branches:
    - master

Ama bunu üretim iş akışım için istemiyorum. Üretime gönder düğmesi gibi manuel bir tetikleyiciye ihtiyacım var . Dokümanlarda buna yakın bir şey görmedim.


Github Eylemlerinde bir iş akışını manuel olarak tetiklemenin bir yolu var mı?

Github Actions, Docker veya Kubernetes'te istediğimi elde etmek için geliştirme ve üretim iş akışlarımı nasıl bölebilirim?

Yanıtlar:


9

Github Eylemlerinde bir iş akışını manuel olarak tetiklemenin bir yolu var mı?

Bunu yapmak için küçük bir kesmek var ...

Watch olayıyla, yıldızla bir eylemi manuel olarak tetikleyebilir veya repoyu kaldırabilirsiniz. İş akışınızdaki etkinliğin kodu:

on:
  watch
    types: [started]

Garip bir şey olduğunu biliyorum ama işe yarıyor! Bununla birlikte, potansiyel yıldızlara sahip bir halka açık repo ise en iyi yol değildir.


Github Actions, Docker veya Kubernetes'te istediğimi elde etmek için geliştirme ve üretim iş akışlarımı nasıl bölebilirim?

Github Eylemlerinde, birden çok iş akışı / iş yapabilir ve hedeflenen dallara veya olaylara göre filtreleyebilirsiniz. Birden fazla olayı birleştirebilirsiniz, örneğin gece yarısı itme ve cron ile bir iş akışını tetikleyebilirsiniz .


7
Haha, bu harika:> repository_dispatchbir yana, tek birleştirebilir watchile if: github.actor == 'hackerman'rastgele yabancılarla dışarı filtreye. Veya daha iyisi - if: github.actor == github.event.repository.owner.loginekstra "güvenlik" için: D
Samira

1
Haha teşekkürler! Evet iyi fikir, zamanım olduğunda bunu denemeliyim! : D
Sarah Abderemane

1
Mükemmel Ben resmi olarak uygulanan bir şey varken bu en iyi yöntem olduğunu düşünüyorum.
Antoine C.

6

Güncelleme : eğik çizgi komut stili "ChatOps" çözümü için slash-komut-gönderme eylemine bakın. Bu, eğik çizgi komutlarıyla (örn. /deploy) İş akışlarını sorundan tetiklemenize ve istek yorumlarını almanıza olanak tanır .

İşte bir deployeğik çizgi komutu için temel bir örnek . REPO_ACCESS_TOKENBir olan repokapsamlı Kişisel Erişim Jetonu

name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v1
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          commands: deploy

Komut bu iş akışında işlenebilir.

name: Deploy Command
on:
  repository_dispatch:
    types: [deploy-command]

Daha birçok seçenek ve farklı kurulum var. Tüm kullanım talimatları için slash-command-dispatch adresine bakın .

Orijinal Yanıt : Bir repository_dispatchiş akışı, GitHub API'sine yapılan bir çağrı ile aşağıdaki şekilde manuel olarak tetiklenebilir.

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] bir GitHub kullanıcı adı
  • [token]Bir olan repokapsamlı Kişisel Erişim Jetonu
  • [repository] iş akışının bulunduğu deponun adıdır.
curl -XPOST -u "[username]:[token]" \
  -H "Accept: application/vnd.github.everest-preview+json" \
  -H "Content-Type: application/json" \
  https://api.github.com/repos/[username]/[repository]/dispatches \
  --data '{"event_type": "production-deploy"}'

1
İlgilenen herkes için, birden fazla dağıtım için tek iş akışı kullanmak mümkündür. Olarak gönderilenler event_typeiş akışı olarak kullanılabilir github.event.action, bu nedenle belirli işler / adımlar gerektiğinde etkinleştirilebilir / devre dışı bırakılabilir. PS: PAT gerçekten gerekli değildir, curl ile başlamak -u "[username]:[password]"veya hatta -u "[username]"çalışmak da işe yarar (ikinci durumda curl kullanıcıdan parola ister); bazı durumlarda kullanımı daha kolay (örneğin, kullanıcı adını girdi olarak alan komut dosyaları veya daha az teknoloji meraklısı kullanıcılar tarafından kullanılması amaçlanan komut dosyaları yazarken).
Samira

2

Sarah'nın gönderisi orijinal soruya en yakın ve en basit cevap olmasına rağmen , biraz çirkin, bu yüzden sonunda devaşağıdaki tetikleyicileri kullanmak için bir şube oluşturarak sonuçlandırdık :

  • Geliştirme iş akışı: devdalda bir itme yapıldığında tetiklenir :

    on:
      push:
        branches:    
          - dev
  • Üretim iş akışı: Bir çekme isteği / birleştirme yapılır tetiklenir deviçin master:

    on:
      pull_request:
        branches:    
          - master

2

Bunu mevcut Github Eylem teklifiyle çözmenin bir başka yolu production, bir dağıtım gerektiğinde master'dan bir şube oluşturmak ve şube üzerinde dağıtım işlemini tetiklemektir production. productionŞube esasen bir aynadır master.

on:
  push:
    branches:    
      - master

Dev inşa eder / zorlar, efendinin bir taahhüdü olduğunda gerçekleşebilir.

on:
  push:
    branches:    
      - production

Serbest bırakma zamanlamasının bir noktasında PR'ı productionşubeye yükseltebilirsiniz . Bu, prod derlemesi / dağıtımı ile ilgilenecektir.


2

Daha fazla ayrıntı / açıklama için düzenlendi.

Yapabileceğiniz bir şey, aramaktır repository_dispatch. repository_dispatch Burada kullanmak için GitHub belgelerini görüntüleyebilirsiniz .

Örneğin, şuna benzer bir GitHub Eylemleri iş akışınız varsa:

on:
  repository_dispatch:
    types: [run_tests]
name: Run tests
jobs:
  test:
    name: Run your tests
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "I just ran all your tests!"

GitHub v3 API Belgeleri'nde açıklanan adımları izleyerek bir havuz gönderme olayı oluşturabilirsiniz .

İlk olarak, kimlik doğrulama için GitHub'da kişisel bir erişim belirteci (PAT) oluşturun.

Sonra şöyle çalıştırabilirsiniz curl:

curl \
  -H "Authorization: token $YOUR_PAT" \
  --request POST \
  --data '{"event_type": "run_tests"}' \
  https://api.github.com/repos/$USER/$REPOSITORY/dispatches

Aynı zamanda üzerinde çalıştığım küçük bir projeyi de bu problemi çözen bir arkadaşla paylaşmak istedim.

https://www.actionspanel.app/

ActionsPanel aynı repository_dispatchAPI'yi kullanıyor ancak kendi PAT'inizi yönetme konusunda endişelenmenize gerek kalmaması için bir GitHub App jetonu ile bunu yapıyor. Bu aynı zamanda birden fazla kişiden oluşan ekipler arasında eylemlerinizi tetiklemeyi çok daha kolay hale getirir.

Kullanıcı isteklerine ve geri bildirimlerine dayanarak, hangi şubeye gönderileceğini belirten özellikler oluşturduk repository_dispatchve hatta eylemi yürütmek istediğinizde parametre enjekte edecek şekilde oluşturduk.

Düğmelerinizi repoda bıraktığınız bildirici bir yaml dosyasıyla yapılandırırsınız ve ActionsPanel, bu dosyayı okuyacak ve eylemlerinizi tetiklemeniz için dinamik olarak kullanıcı arayüzünüzü oluşturacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.