ทริกเกอร์เวิร์กโฟลว์แบบแมนนวลใน Github Actions


9

ฉันกำลังตั้งค่า Github Actions สำหรับที่เก็บโครงการ

เวิร์กโฟลว์ประกอบด้วยขั้นตอนต่อไปนี้:

  • สร้างภาพนักเทียบท่า
  • ผลักรูปภาพไปยังรีจิสตรีคอนเทนเนอร์
  • เปิดใช้งานการปรับใช้ Kubernetes

อย่างไรก็ตามฉันมีการปรับใช้ Kubernetes สองแบบ: หนึ่งเพื่อการพัฒนาและอีกหนึ่งสำหรับการผลิต ดังนั้นฉันมี Github Action สองเวิร์กโฟลว์

เวิร์กโฟลว์ Github Action สำหรับการพัฒนาจะถูกเรียกใช้ทุกครั้งที่มีการส่งการกระทำ:

on:
  push:
    branches:
    - master

แต่ฉันไม่ต้องการสำหรับกระบวนการผลิตของฉัน ฉันต้องการไกไกด้วยตนเองเช่นปุ่มส่งไปยังการผลิต ฉันไม่เห็นอะไรเลยใกล้เคียงกับที่อยู่ในเอกสาร


มีวิธีการทริกเกอร์กระแสงานด้วยตนเองในการกระทำของ Github หรือไม่?

ฉันจะแยกการพัฒนาและเวิร์กโฟลว์การผลิตของฉันเพื่อให้บรรลุสิ่งที่ฉันต้องการได้อย่างไรทั้งใน Github Actions, Docker หรือ Kubernetes

คำตอบ:


9

มีวิธีการทริกเกอร์กระแสงานด้วยตนเองในการกระทำของ Github หรือไม่?

ฉันมีแฮ็คเล็กน้อยที่จะทำ ...

ด้วยเหตุการณ์การดูคุณสามารถเรียกการกระทำด้วยตนเองโดยติดดาวหรือยกเลิกการติดดาวซ้ำ รหัสสำหรับเหตุการณ์ในเวิร์กโฟลว์ของคุณคือ:

on:
  watch
    types: [started]

ฉันรู้ว่ามันเป็นเรื่องแปลก แต่ก็ใช้งานได้! อย่างไรก็ตามมันไม่ใช่วิธีที่ดีที่สุดหากเป็น repo สาธารณะที่มีดาวที่มีศักยภาพ


ฉันจะแยกการพัฒนาและเวิร์กโฟลว์การผลิตของฉันเพื่อให้บรรลุสิ่งที่ฉันต้องการได้อย่างไรทั้งใน Github Actions, Docker หรือ Kubernetes

ใน Github Actions ฉันหมายถึงคุณสามารถทำเวิร์กโฟลว์ / งานและกรองตามสาขาหรือเหตุการณ์เป้าหมาย คุณสามารถรวมหลายเหตุการณ์ตัวอย่างเช่นเรียกเวิร์กโฟลว์สำหรับการผลักดันและกับ cronในเวลาเที่ยงคืน


7
ฮ่าฮ่าเป็นสิ่งที่ดีมาก:> repository_dispatchนอกจากนี้เราสามารถรวมเข้าwatchด้วยกันif: github.actor == 'hackerman'เพื่อกรองคนแปลกหน้าแบบสุ่ม หรือดีกว่า - if: github.actor == github.event.repository.owner.loginสำหรับ "ความปลอดภัย" พิเศษ: D
Samira

1
ฮ่าฮ่าขอบคุณ! ใช่ความคิดที่ดีฉันจะลองเมื่อฉันมีเวลา! : D
Sarah Abderemane

1
สมบูรณ์แบบฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในขณะที่ไม่มีการดำเนินการอย่างเป็นทางการ
แอนทอน C.

5

อัปเดต : สำหรับโซลูชันรูปแบบคำสั่ง slash "ChatOps" ดูการกระทำของคำสั่ง slash-command-dispatch สิ่งนี้ช่วยให้คุณสามารถทริกเกอร์เวิร์กโฟลว์ด้วยคำสั่ง slash (เช่น/deploy) จากปัญหาและดึงความคิดเห็นคำขอ

นี่เป็นตัวอย่างพื้นฐานสำหรับdeployคำสั่ง slash REPO_ACCESS_TOKENเป็นโทเค็นการเข้าถึงส่วนบุคคลที่repoกำหนดขอบเขต

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

คำสั่งสามารถประมวลผลในเวิร์กโฟลว์นี้

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

มีตัวเลือกมากมายและการตั้งค่าที่แตกต่างกัน ดูslash-command-dispatchสำหรับคำแนะนำการใช้งานอย่างเต็มรูปแบบ

คำตอบเดิม : repository_dispatchเวิร์กโฟลว์สามารถทริกเกอร์ด้วยตนเองโดยการเรียก GitHub API ดังนี้

on:
  repository_dispatch:
    types: [production-deploy]
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
สำหรับผู้ที่สนใจสามารถใช้เวิร์กโฟลว์เดียวสำหรับการส่งหลายครั้งได้ สิ่งที่ส่งเป็นevent_typeใช้ได้สำหรับเวิร์กโฟลว์github.event.actionดังนั้นงาน / ขั้นตอนเฉพาะสามารถเปิดใช้งาน / ปิดใช้งานเมื่อจำเป็น PS: PAT ไม่จำเป็นจริงๆเริ่มต้นด้วย-u "[username]:[password]"หรือแม้กระทั่งการ-u "[username]"ทำงานเช่นกัน (ในกรณีที่สอง curl แจ้งให้ผู้ใช้รหัสผ่าน); ใช้งานง่ายขึ้นในบางกรณี (ตัวอย่างเช่นเมื่อเขียนสคริปต์ซึ่งใช้ชื่อผู้ใช้เป็นอินพุตหรือสคริปต์ที่ตั้งใจให้ผู้ใช้ที่ไม่ใช้เทคโนโลยีเข้าใจ)
Samira

2

แม้ว่าโพสต์ของซาร่าห์จะเป็นคำตอบที่ใกล้เคียงที่สุดและง่ายที่สุดสำหรับคำถามดั้งเดิม แต่มันค่อนข้างแฮ็คดังนั้นเราจึงจบลงด้วยการสร้างdevสาขาเพื่อใช้ทริกเกอร์ต่อไปนี้:

  • เวิร์กโฟลว์การพัฒนา: เกิดขึ้นเมื่อมีการกดที่devสาขา:

    on:
      push:
        branches:    
          - dev
    
  • เวิร์กโฟลว์การผลิต: ถูกเรียกใช้เมื่อทำคำขอดึง / ผสานจากdevถึงmaster:

    on:
      pull_request:
        branches:    
          - master
    

1

แก้ไขเพื่อดูรายละเอียด / คำอธิบายเพิ่มเติม

repository_dispatchสิ่งหนึ่งที่คุณสามารถทำได้คือการเรียกร้องให้ คุณสามารถดูเอกสาร GitHub สำหรับการใช้ที่นี่repository_dispatch

ตัวอย่างเช่นหากคุณมีเวิร์กโฟลว์ GitHub Actions ที่มีลักษณะดังนี้:

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 เอกสาร

ครั้งแรก สร้างโทเค็นการเข้าถึงส่วนบุคคล (PAT)บน GitHub เพื่อตรวจสอบความถูกต้อง

จากนั้นคุณสามารถเรียกใช้curlดังนี้:

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

ในเวลาเดียวกันฉันยังต้องการแบ่งปันโครงการขนาดเล็กที่ฉันได้ทำงานกับเพื่อนที่แก้ปัญหาที่แน่นอนนี้

https://www.actionspanel.app/

ActionsPanel ใช้สิ่งนี้เหมือนกัน repository_dispatch APIแต่ใช้กับโทเค็น GitHub App เพื่อให้คุณไม่ต้องกังวลกับการจัดการ PAT ของคุณเอง นอกจากนี้ยังทำให้การเรียกใช้การกระทำของคุณในทีมที่มีคนหลายคนง่ายขึ้น

เราได้สร้างฟีเจอร์ภายในเพื่อระบุสาขาที่จะส่งตามคำขอของผู้ใช้และข้อเสนอแนะ repository_dispatchไปยังและเรายังสร้างวิธีฉีดพารามิเตอร์เมื่อคุณต้องการดำเนินการ

คุณกำหนดค่าปุ่มของคุณด้วยไฟล์ yaml ที่ประกาศซึ่งคุณปล่อยไว้ใน repo และ ActionsPanel จะอ่านไฟล์นั้นและสร้าง UI ของคุณแบบไดนามิกเพื่อให้คุณเรียกการกระทำของคุณ


0

อีกวิธีหนึ่งในการแก้ไขปัญหานี้ด้วยข้อเสนอ Github Action ปัจจุบันคือการสร้างproductionสาขาจากต้นแบบเมื่อต้องการการปรับใช้ & ทริกเกอร์การดำเนินการปรับใช้บนproductionสาขา สาขาเป็นหลักกระจกของที่productionmaster

on:
  push:
    branches:    
      - master

Dev builds / push สามารถเกิดขึ้นได้ทุกเมื่อที่มีความมุ่งมั่นต่อนาย

on:
  push:
    branches:    
      - production

ในบางช่วงของกำหนดการวางจำหน่ายคุณสามารถเพิ่ม PR ไปยังproductionสาขาได้ สิ่งนี้จะดูแลการสร้าง / ปรับใช้ prod

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.