Kích hoạt quy trình làm việc thủ công trong Tác vụ Github


9

Tôi đang thiết lập Github Action cho kho lưu trữ dự án.

Quy trình công việc bao gồm các bước sau:

  • Xây dựng hình ảnh docker
  • Đẩy hình ảnh vào sổ đăng ký container
  • Ra mắt một triển khai Kubernetes.

Tuy nhiên, tôi có hai triển khai Kubernetes khác nhau: một cho phát triển và một cho sản xuất. Do đó, tôi cũng có hai quy trình công việc Github Action.

Luồng công việc Hành động Github để phát triển được kích hoạt mỗi khi cam kết được đẩy:

on:
  push:
    branches:
    - master

Nhưng tôi không muốn điều đó cho quy trình sản xuất của mình. Tôi sẽ cần một trình kích hoạt thủ công, như nút Gửi đến sản xuất . Tôi đã không thấy bất cứ điều gì gần với điều đó trong các tài liệu.


Có cách nào để kích hoạt quy trình làm việc theo cách thủ công trong Github Action không?

Làm cách nào tôi có thể phân chia quá trình phát triển và quy trình sản xuất của mình để đạt được những gì tôi muốn, trên Github Action, Docker hoặc Kubernetes?

Câu trả lời:


9

Có cách nào để kích hoạt quy trình làm việc theo cách thủ công trong Github Action không?

Tôi đã có một chút hack để làm như vậy ...

Với sự kiện đồng hồ, bạn có thể tự kích hoạt một hành động bằng cách gắn dấu sao hoặc bỏ dấu sao repo. Mã cho sự kiện trong quy trình làm việc của bạn là:

on:
  watch
    types: [started]

Tôi biết đó là một shit lạ nhưng nó hoạt động! Tuy nhiên, đó không phải là cách tốt nhất nếu đó là một repo công khai với các ngôi sao tiềm năng.


Làm cách nào tôi có thể phân chia quá trình phát triển và quy trình sản xuất của mình để đạt được những gì tôi muốn, trên Github Action, Docker hoặc Kubernetes?

Trong ý nghĩa của Github, bạn có thể thực hiện nhiều quy trình / công việc và lọc theo các nhánh hoặc sự kiện được nhắm mục tiêu. Bạn có thể kết hợp nhiều sự kiện, ví dụ như kích hoạt một quy trình công việc để đẩy và với một cron vào nửa đêm.


7
Haha, điều này thật tuyệt:> repository_dispatchsang một bên, người ta có thể kết hợp watchvới if: github.actor == 'hackerman'để lọc ra những người lạ ngẫu nhiên. Hoặc tốt hơn nữa - if: github.actor == github.event.repository.owner.loginđể có thêm "bảo mật": D
Samira

1
Cảm ơn! Có ý kiến ​​hay, tôi đã thử nó khi tôi có thời gian! : D
Sarah Abderemane

1
Hoàn hảo Tôi nghĩ rằng đây là phương pháp tốt nhất trong khi không có gì được thực hiện chính thức.
Antoine C.

5

Cập nhật : Đối với giải pháp "ChatOps" kiểu dấu gạch chéo, hãy xem hành động gạch chéo lệnh . Điều này có thể cho phép bạn kích hoạt quy trình công việc bằng các lệnh gạch chéo (ví dụ:/deploy ) từ vấn đề và lấy bình luận yêu cầu.

Dưới đây là một ví dụ cơ bản cho deploylệnh gạch chéo. REPO_ACCESS_TOKENlà mã thông báo truy cập cá nhân córepo phạm vi

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

Lệnh có thể được xử lý trong quy trình công việc này.

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

Có nhiều tùy chọn và thiết lập khác nhau. Xem slash-lệnh-công văn để biết hướng dẫn sử dụng đầy đủ.

Câu trả lời gốc : Một repository_dispatchquy trình làm việc có thể được kích hoạt thủ công bằng một cuộc gọi đến API GitHub như sau.

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] là tên người dùng GitHub
  • [token]là mã thông báo truy cập cá nhân córepo phạm vi
  • [repository] là tên của kho lưu trữ mà dòng công việc nằm trong.
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
Đối với bất kỳ ai quan tâm, có thể sử dụng quy trình làm việc duy nhất cho nhiều công văn. Những gì được gửi dưới dạng event_typecó sẵn cho quy trình làm việc github.event.action, vì vậy các công việc / bước cụ thể có thể được bật / tắt khi cần. PS: PAT không thực sự cần thiết, bắt đầu curl với -u "[username]:[password]"hoặc thậm chí -u "[username]"hoạt động tốt (trong trường hợp thứ hai curl nhắc người dùng nhập mật khẩu); dễ sử dụng hơn trong một số trường hợp (ví dụ: khi viết tập lệnh lấy tên người dùng làm đầu vào hoặc tập lệnh dành cho người dùng ít hiểu biết về công nghệ).
Samira

2

Mặc dù bài đăng của Sarah là câu trả lời gần nhất và đơn giản nhất cho câu hỏi ban đầu, nhưng nó hơi khó hiểu vì vậy cuối cùng chúng tôi đã kết thúc bằng cách tạo một devnhánh để sử dụng các kích hoạt sau:

  • Quy trình phát triển: được kích hoạt khi thực hiện một cú đẩy trên devnhánh:

    on:
      push:
        branches:    
          - dev
    
  • Công việc sản xuất: kích hoạt khi một yêu cầu kéo / merge được làm từ devđể master:

    on:
      pull_request:
        branches:    
          - master
    

1

Chỉnh sửa để biết thêm chi tiết / giải thích.

Một điều mà bạn có thể làm là gọi đến repository_dispatch. Bạn có thể xem tài liệu GitHub để sử dụng repository_dispatch tại đây .

Ví dụ: nếu bạn có luồng công việc GitHub Action trông như thế này:

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

Bạn có thể tạo một sự kiện gửi kho lưu trữ bằng cách làm theo các bước được giải thích trên Tài liệu API GitHub v3 .

Đầu tiên, tạo mã thông báo truy cập cá nhân (PAT) trên GitHub để xác thực.

Sau đó, bạn có thể chạy curlnhư vậy:

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

Đồng thời, tôi cũng muốn chia sẻ một dự án nhỏ mà tôi đang thực hiện với một người bạn để giải quyết vấn đề chính xác này.

https://www.ilitiespanel.app/

ActionPanel sử dụng cùng repository_dispatchAPI này nhưng làm như vậy với mã thông báo Ứng dụng GitHub để bạn không cần phải lo lắng về việc quản lý PAT của chính mình. Điều này cũng làm cho việc kích hoạt hành động của bạn giữa các nhóm có nhiều người dễ dàng hơn nhiều.

Dựa trên yêu cầu và phản hồi của người dùng, chúng tôi đã tích hợp các tính năng để chỉ định chi nhánh nào sẽ gửi repository_dispatchđến và thậm chí chúng tôi đã xây dựng theo cách để tiêm tham số khi bạn muốn thực hiện hành động.

Bạn định cấu hình các nút của mình bằng tệp yaml khai báo mà bạn để lại trong repo và ActionPanel sẽ đọc tệp đó và tự động tạo giao diện người dùng để bạn kích hoạt hành động của mình.


0

Một cách khác để giải quyết vấn đề này với ưu đãi Github Action hiện tại là tạo một productionnhánh từ chủ khi cần triển khai & kích hoạt hành động triển khai trên productionnhánh. Các productionchi nhánh về cơ bản là một tấm gương của master.

on:
  push:
    branches:    
      - master

Dev xây dựng / đẩy có thể xảy ra bất cứ khi nào có một cam kết với chủ.

on:
  push:
    branches:    
      - production

Tại một số điểm trong lịch phát hành, bạn có thể nâng PR lên productionchi nhánh. Điều này sẽ chăm sóc việc xây dựng / triển khai prod.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.