一、準(zhǔn)備工作
擁有一個(gè) GitHub 倉(cāng)庫(kù)確保你的項(xiàng)目代碼已經(jīng)存儲(chǔ)在一個(gè) GitHub 倉(cāng)庫(kù)中。如果沒(méi)有,先創(chuàng)建一個(gè)新的倉(cāng)庫(kù)并將本地代碼推送到該倉(cāng)庫(kù)。
確定部署目標(biāo)環(huán)境例如,你的應(yīng)用可能要部署到服務(wù)器(如 Linux 服務(wù)器)、云平臺(tái)(如 AWS、Azure、Google Cloud 等)或者容器環(huán)境(如 Docker 容器)。了解目標(biāo)環(huán)境的詳細(xì)信息,包括訪(fǎng)問(wèn)方式(如 SSH 密鑰、API 密鑰等),這對(duì)于后續(xù)配置部署步驟至關(guān)重要。
編寫(xiě)必要的構(gòu)建和部署腳本根據(jù)你的項(xiàng)目類(lèi)型(如 Python 項(xiàng)目可能需要setup.py用于構(gòu)建,Node.* 項(xiàng)目可能需要package.*on中的腳本),編寫(xiě)構(gòu)建腳本。對(duì)于部署腳本,例如,如果要部署到服務(wù)器,可能需要編寫(xiě)一個(gè)deploy.sh腳本,其中包含將構(gòu)建好的文件傳輸?shù)椒?wù)器并啟動(dòng)服務(wù)的步驟。如果是部署到云平臺(tái),可能需要使用相應(yīng)的云平臺(tái) CLI 工具編寫(xiě)部署腳本。
二、創(chuàng)建 GitHub Acti* 工作流文件
在倉(cāng)庫(kù)中添加.github/workflows目錄
如果該目錄不存在,在倉(cāng)庫(kù)的根目錄下創(chuàng)建.github目錄,然后在其中創(chuàng)建workflows目錄。創(chuàng)建工作流文件(例如deploy.yml)
在.github/workflows目錄下創(chuàng)建一個(gè)新的.yml(YAML)文件,文件名可以自定義,這里以deploy.yml為例。以下是一個(gè)簡(jiǎn)單的工作流文件示例,用于一個(gè) Node.* 項(xiàng)目的構(gòu)建和部署到服務(wù)器:name: CI/CD Pipeline
on:
push:
branches:
- main # 可以修改為你想要觸發(fā)工作流的分支,如'*'或'develop'
jobs:
build-and-deploy:
runs - on: ubuntu - latest
steps:
- name: Checkout code
uses: acti*/checkout@v3
- name: Setup Node.*
uses: acti*/setup - node@v3
with:
node - version: '18.x' # 根據(jù)你的項(xiàng)目需求修改Node.*版本
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
- name: Deploy to server
uses: appleboy/ssh -
[email protected]
with:
host: ${{ secrets.SERVER_HOST }} # 從倉(cāng)庫(kù) Secrets中獲取服務(wù)器主機(jī)地址
username: ${{ secrets.SERVER_USERNAME }} # 從倉(cāng)庫(kù) Secrets中獲取服務(wù)器用戶(hù)名
key: ${{ secrets.SERVER_SSH_KEY }} # 從倉(cāng)庫(kù) Secrets中獲取SSH密鑰
script: |
cd /path/to/deployment/directory # 修改為服務(wù)器上的部署目錄
tar -xzf build.tar.gz # 假設(shè)構(gòu)建后的文件打包為build.tar.gz,根據(jù)實(shí)際情況修改
pm2 restart app.* # 假設(shè)使用PM2啟動(dòng)應(yīng)用,根據(jù)實(shí)際情況修改
- 在這個(gè)示例中:
- name定義了工作流的名稱(chēng)。
- on部分指定了工作流的觸發(fā)條件,這里是在main分支有代碼推送時(shí)觸發(fā)。
- jobs部分定義了一個(gè)名為build - and - deploy的任務(wù)。
- runs - on指定了任務(wù)運(yùn)行的環(huán)境,這里是*的 Ubuntu 環(huán)境。
- 每個(gè)steps部分的name是步驟名稱(chēng),uses表示使用已有的 GitHub Acti* 動(dòng)作,run表示執(zhí)行自定義的命令。例如,acti*/checkout@v3用于檢出代碼,acti*/setup - node@v3用于設(shè)置 Node.* 環(huán)境,后續(xù)的npm命令用于安裝依賴(lài)、構(gòu)建項(xiàng)目,*使用appleboy/ssh - [email protected]通過(guò) SSH 連接到服務(wù)器并執(zhí)行部署腳本。
- 三、配置敏感信息(Secrets)
- 訪(fǎng)問(wèn)倉(cāng)庫(kù)的 Settings - > Secrets
- 在 GitHub 倉(cāng)庫(kù)頁(yè)面,點(diǎn)擊Settings,然后在左側(cè)菜單中選擇Secrets。
- 添加敏感信息
- 例如,對(duì)于上面的示例,需要添加SERVER_HOST(服務(wù)器主機(jī)地址)、SERVER_USERNAME(服務(wù)器用戶(hù)名)和SERVER_SSH_KEY(SSH 密鑰)。這些信息是保密的,通過(guò) Secrets 存儲(chǔ)可以避免在工作流文件中直接暴露敏感數(shù)據(jù)。
- 在工作流文件中引用 Secrets
- 在工作流文件中,使用${{ secrets.SECRET_NAME }}的格式來(lái)引用存儲(chǔ)的 Secrets,如上面示例中的${{ secrets.SERVER_HOST }}等。
- 四、測(cè)試工作流
- 提交代碼并觸發(fā)工作流
- 在本地對(duì)代碼進(jìn)行一些修改,然后提交并推送到配置的分支(如main)。這將觸發(fā) GitHub Acti* 工作流的運(yùn)行。
- 查看工作流運(yùn)行狀態(tài)
- 在 GitHub 倉(cāng)庫(kù)的Acti*選項(xiàng)卡中,可以查看工作流的運(yùn)行狀態(tài)。它會(huì)顯示每個(gè)步驟的執(zhí)行情況,包括是否成功、失敗或者正在運(yùn)行。如果某個(gè)步驟出現(xiàn)問(wèn)題,可以查看詳細(xì)的日志來(lái)排查錯(cuò)誤。