Alur kerja manual dipicu dalam Tindakan Github

9

Saya menyiapkan Tindakan Github untuk repositori proyek.

Alur kerja terdiri dari langkah-langkah berikut:

  • Membangun citra buruh pelabuhan
  • Mendorong gambar ke registry kontainer
  • Meluncurkan penyebaran Kubernet.

Namun, saya memiliki dua penyebaran Kubernet yang berbeda: satu untuk pengembangan, dan satu untuk produksi. Karenanya, saya juga memiliki dua alur kerja Tindakan Github.

Alur kerja Github Action untuk pengembangan dipicu setiap kali komit didorong:

on:
  push:
    branches:
    - master

Tapi saya tidak ingin itu untuk alur kerja produksi saya. Saya memerlukan pemicu manual, seperti tombol Kirim ke produksi . Saya tidak melihat sesuatu yang dekat dengan itu di dokumen.


Apakah ada cara untuk memicu alur kerja secara manual di Tindakan Github?

Bagaimana saya bisa membagi perkembangan dan alur kerja produksi saya untuk mencapai apa yang saya inginkan, baik pada Tindakan Github, Docker atau Kubernetes?

Antoine C.
sumber

Jawaban:

9

Apakah ada cara untuk memicu alur kerja secara manual di Tindakan Github?

Saya punya sedikit hack untuk melakukannya ...

Dengan acara tontonan, Anda dapat memicu aksi secara manual dengan membintangi atau menghapus bintang pada repo. Kode untuk acara dalam alur kerja Anda adalah:

on:
  watch
    types: [started]

Aku tahu itu aneh, tapi berhasil! Namun demikian, itu bukan cara terbaik jika itu repo publik dengan bintang potensial.


Bagaimana saya bisa membagi perkembangan dan alur kerja produksi saya untuk mencapai apa yang saya inginkan, baik pada Tindakan Github, Docker atau Kubernetes?

Maksud saya di Github Actions, Anda dapat melakukan beberapa alur kerja / pekerjaan dan memfilter berdasarkan cabang atau acara yang ditargetkan. Anda dapat menggabungkan beberapa peristiwa misalnya memicu alur kerja untuk mendorong dan dengan cron di tengah malam.

Sarah Abderemane
sumber
7
Haha, ini bagus:> repository_dispatchselain itu, orang dapat bergabung watchdengan if: github.actor == 'hackerman'untuk menyaring orang asing acak. Atau lebih baik lagi - if: github.actor == github.event.repository.owner.loginuntuk "keamanan" tambahan: D
Samira
1
Haha terima kasih! Ya ide bagus, saya harus mencoba ini ketika saya punya waktu! : D
Sarah Abderemane
1
Sempurna Saya pikir ini adalah metode terbaik sementara tidak ada sesuatu yang diimplementasikan secara resmi.
Antoine C.
5

Pembaruan : Untuk gaya perintah slash "ChatOps" lihat aksi slash-command-dispatch . Ini dapat memungkinkan Anda untuk memicu alur kerja dengan perintah slash (misalnya /deploy) dari masalah dan menarik komentar permintaan.

Berikut adalah contoh dasar untuk deployperintah slash. REPO_ACCESS_TOKENadalah Token Akses Pribadi yangrepo dicakup

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

Perintah dapat diproses dalam alur kerja ini.

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

Ada banyak opsi dan pengaturan berbeda. Lihat slash-command-dispatch untuk instruksi penggunaan lengkap.

Jawaban Asli : repository_dispatchAlur kerja dapat dipicu secara manual oleh panggilan ke API GitHub sebagai berikut.

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] adalah nama pengguna GitHub
  • [token]adalah Token Akses Pribadi yangrepo dicakup
  • [repository] adalah nama repositori tempat alur kerja berada.
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"}'
peterevans
sumber
1
Bagi siapa pun yang tertarik, dimungkinkan untuk menggunakan alur kerja tunggal untuk beberapa kiriman. Apa yang dikirim sebagai event_typetersedia untuk alur kerja sebagai github.event.action, sehingga pekerjaan / langkah tertentu dapat diaktifkan / dinonaktifkan saat diperlukan. PS: PAT tidak benar-benar diperlukan, mulai dengan ikal -u "[username]:[password]"atau bahkan -u "[username]"bekerja dengan baik (dalam kasus kedua ikal meminta pengguna untuk kata sandi); lebih mudah digunakan dalam beberapa kasus (misalnya saat menulis skrip yang menggunakan nama pengguna sebagai input, atau skrip yang dimaksudkan untuk digunakan oleh pengguna yang kurang mengerti teknologi).
Samira
2

Meskipun posting Sarah adalah jawaban yang paling dekat dan paling sederhana untuk pertanyaan awal, ini agak membingungkan sehingga kami akhirnya membuat devcabang untuk menggunakan pemicu berikut:

  • Alur kerja pengembangan: dipicu saat push dilakukan pada devcabang:

    on:
      push:
        branches:    
          - dev
    
  • Alur kerja produksi: dipicu ketika permintaan tarik / penggabungan dilakukan dari devke master:

    on:
      pull_request:
        branches:    
          - master
    
Antoine C.
sumber
1

Diedit untuk lebih detail / penjelasan.

Satu hal yang dapat Anda lakukan adalah menelepon repository_dispatch. Anda dapat melihat dokumentasi GitHub untuk menggunakan di repository_dispatch sini .

Misalnya, jika Anda memiliki alur kerja Tindakan GitHub yang terlihat seperti ini:

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!"

Anda dapat membuat acara pengiriman repositori dengan mengikuti langkah-langkah yang dijelaskan pada Dokumentasi API GitHub v3 .

Pertama, buat token akses pribadi (PAT) di GitHub untuk otentikasi.

Kemudian, Anda dapat menjalankan curlseperti:

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

Pada saat yang sama, saya juga ingin berbagi proyek kecil yang telah saya kerjakan dengan seorang teman yang menyelesaikan masalah ini.

https://www.actionspanel.app/

ActionsPanel menggunakan repository_dispatchAPI yang sama ini tetapi melakukannya dengan token Aplikasi GitHub sehingga Anda tidak perlu khawatir tentang mengelola PAT Anda sendiri. Ini juga membuatnya lebih mudah untuk memicu tindakan Anda di tim dengan banyak orang.

Berdasarkan permintaan dan umpan balik pengguna, kami telah membangun fitur untuk menentukan cabang mana untuk mengirim repository_dispatchke, dan kami bahkan telah membangun dengan cara menyuntikkan parameter ketika Anda ingin menjalankan tindakan.

Anda mengonfigurasi tombol Anda dengan file yaml deklaratif yang Anda tinggalkan di repo, dan ActionsPanel akan membaca file itu dan secara dinamis membuat UI Anda untuk memicu tindakan Anda.

aaronbatilo
sumber
0

Cara lain untuk menyelesaikan ini dengan penawaran Github Action saat ini adalah dengan membuat productioncabang dari master saat dibutuhkan, & memicu tindakan penyebaran di productioncabang. The productioncabang pada dasarnya adalah cermin dari master.

on:
  push:
    branches:    
      - master

Membangun / mendorong pengembangan dapat terjadi setiap kali ada komitmen kepada master.

on:
  push:
    branches:    
      - production

Di beberapa titik dalam jadwal rilis, Anda dapat menaikkan PR ke productioncabang. Ini akan menangani build / deploy produk.

pengguna1064504
sumber