GitHub Actions 是一個非常強大的工具,可以用來實現各種自動化任務,包括自動編譯和釋出 release。以下是一個基本的工作流程,展示如何使用 GitHub Actions 實現這一目標:
-
建立 GitHub Actions 工作流檔案:在你的 GitHub 倉庫中,建立一個
.github/workflows
目錄,並在該目錄中建立一個新的工作流檔案,例如release.yml
。 -
定義工作流:在
release.yml
檔案中,定義你的工作流步驟。以下是一個示例工作流,它演示瞭如何在每次推送到main
分支時進行編譯並建立一個新的 release。
name: Build and Release
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: "14"
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: build/
release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v1.0.0
release_name: Release v1.0.0
body: |
Release notes for v1.0.0
draft: false
prerelease: false
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: build/
asset_name: build-artifacts.zip
asset_content_type: application/zip
解釋
-
工作流名稱和觸發器:
name: Build and Release
:定義工作流的名稱。on
條件定義了工作流何時被觸發,這裡是每當推送到main
分支時觸發。
-
構建作業:
runs-on: ubuntu-latest
:指定工作流程執行的環境。actions/checkout@v4
:將程式碼倉庫檢出到 runner。actions/setup-node@v2
:設定 Node.js 環境。npm install
:安裝專案依賴。npm run build
:構建專案。actions/upload-artifact@v4
:將構建的工件上傳,以便在後續步驟中使用。actions/upload-artifact
的實現程式碼可以在https://github.com/actions/upload-artifact
找到。
-
釋出作業:
needs: build
:指定此作業依賴於名為build
的作業。actions/download-artifact@v2
:下載構建工件。actions/create-release@v1
:在 GitHub 上建立一個新 release。GITHUB_TOKEN
用於進行身份驗證。actions/upload-release-asset@v1
:將構建工件作為 release 資源上傳。
注意事項
- GITHUB_TOKEN:GitHub 提供的內建秘密,用於在 Actions 中進行身份驗證。
- 自定義步驟:根據你的專案和需求,你可能需要調整或新增步驟。例如,編譯步驟可能會有所不同,具體取決於你使用的程式語言和構建工具。
- 版本號:在實際使用中,你可能希望自動生成版本號而不是硬編碼版本號。
參見:GitHub Actions 文件
更多示例程式碼
# .github/workflows/github-actions-demo.yaml
# 將程式碼打包為 tar.gz 併發布
name: Auto Release # 工作流名
run-name: Auto Release # 執行時的工作流名
on: [push]
jobs:
build: # job 名可以自定義
runs-on: ubuntu-latest # 也可以是容器
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Package VM
run: tar -zcvf VM.tar.gz VM
- name: Package VPS
run: tar -zcvf VPS.tar.gz VPS
- name: Upload Artifact VM.tar.gz
uses: actions/upload-artifact@v4
with:
name: VM.tar.gz
path: VM.tar.gz
- name: Upload Artifact VPS.tar.gz
uses: actions/upload-artifact@v4
with:
name: VPS.tar.gz
path: VPS.tar.gz
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.extract_branch.outputs.branch }}-${{ github.run_number }}
release_name: Release for ${{ steps.extract_branch.outputs.branch }} at ${{ github.sha }}
draft: false
prerelease: false
- name: Upload Release Asset 1
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./VM.tar.gz
asset_name: VM.tar.gz
asset_content_type: application/gzip
- name: Upload Release Asset 2
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./VPS.tar.gz
asset_name: VPS.tar.gz
asset_content_type: application/gzip
# 一些可用變數
# runner.os: 執行 Action 的系統名
# job.status: job 的狀態
# github.actor: 執行的 Action
# github.event_name: 觸發 Action 的事件名
# github.ref: 當前分支名
# github.repository: 儲存庫名
# github.workspace: 儲存庫工作區