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 deploymenton: workflow_call: inputs: artifact-name: type: string required: false default: dist secrets: some-secret: required: truejobs: 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 Project30 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: