Skip to content
CodeSook
CodeSook

25. Reusable workflow


What is a reusable workflow?

เราสามารถสร้าง workflows ไว้อีกไฟล์นึง แต่บอก github ว่า workflows นี้จะถูกเรียกใช้จากอีก workflows นึง ไม่ต้องเอามารันใน github action นะ

เราจะมาสร้าง workflows ที่เอาไว้ deploy react app ของเรา เพื่อให้ง่าย ก็เอาแค่นี้แหละ

สร้างไฟล์ deploy-reusable.yaml

แต่ว่าไม่ได้ deploy จริงนะ
แค่จะแสดงให้เห็นว่าสร้าง workflow ไว้ แล้วให้ workflow อื่นๆเรียกใช้งาน เขียนอย่างไร

workflows/deploy-reusable.yaml
name: Web deployment
on:
workflow_call:
inputs:
artifact-name:
type: string
required: false
default: dist
secrets:
some-secret:
required: true
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: download dist folder
uses: actions/download-artifact@v4
with:
name: ${{ inputs.artifact-name }}
- name: List all files
run: ls -R

จาก code ด้านบน

เราใช้ event workflow_call เพื่อให้ workflow นี้สามารถถูกเรียกใช้จากอื่นได้

ใน workflow_call นี้ สามารถส่ง inputs กับ secrets มาได้ด้วย
เวลา workflow อื่นๆเรียกใช้งาน เราอยากให้ workflow รับ data อะไรเข้ามาก็กำหนด inputs กับ secrets ไว้

ถัดมาถ้าอยากให้ workflow อื่นเรียกใช้งานก็จะเขียนแบบนี้

workflows/deploy-use-other-workflow.yaml
name: Deploy Project
30 collapsed lines
on:
push:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Get Code
uses: actions/checkout@v4
- name: Install and cache dependencies
id: cache-deps
uses: ./.github/actions/install-and-caching
- name: Report cache hit
run: echo ${{ steps.cache-deps.outputs.cache-hit }}
- name: Build
run: bun run build
- name: upload dist folder
uses: actions/upload-artifact@v4
with:
name: dist
path: |
dist
public
deploy:
needs:
- build
uses: ./.github/workflows/deploy-reusable.yaml
with:
artifact-name: dist
secrets:
some-secret: ${{ secrets.SOME_SECRET }}

จาก code ด้านบน

job deploy ที่ไม่มี runs-on และ steps แล้ว
เราจะใช้ uses แทน แล้วใส่ path ไปที่ workflow ของเรา

เราสามารถส่ง argument ไปที่ workflow ได้ด้วย ถ้าเป็น inputs ก็ให้ใช้ with: ถ้าเป็น secrets ก็ให้ใช้ secrets: