準(zhǔn)備
正式開(kāi)始之前,你需要掌握 GitHub Action 的基礎(chǔ)語(yǔ)法:
- workflow (工作流程):持續(xù)集成一次運(yùn)行的過(guò)程,就是一個(gè) workflow。
- name: 工作流的名稱(chēng)。
- on: 指定次工作流的觸發(fā)器。push 表示只要有人將更改推送到倉(cāng)庫(kù)就會(huì)觸發(fā)工作流運(yùn)行。(點(diǎn)擊這里了解如何指定特定分支,路徑或標(biāo)簽)
- jobs: 將工作流運(yùn)行的所有作業(yè)組合到一起。
- build-and-deploy: 定義的作業(yè)的名稱(chēng)。
- runs-on: 將作業(yè)配置為在最新版本的 Ubuntu Linux 上運(yùn)行。這意味著作業(yè)將在 GitHub 托管的新虛擬機(jī)上執(zhí)行。有關(guān)使用其他運(yùn)行器的語(yǔ)法示例,請(qǐng)參閱 GitHub 操作的工作流語(yǔ)法。
- steps: 將作業(yè)中運(yùn)行的所有步驟組合在一起。嵌套在此部分下的每個(gè)項(xiàng)都是一個(gè)單獨(dú)的操作或 shell 腳本。
- uses: 指定需要運(yùn)行的 action。
- env: 指定運(yùn)行 action 時(shí)需要用到的環(huán)境變量的值。
一、密鑰準(zhǔn)備
為了方便運(yùn)行GitHub Actions時(shí)登錄GitHub賬號(hào),我們使用SSH方式登錄。就是要把設(shè)備的私鑰交給GitHub Actions,公鑰交給GitHub,需要去Settings里去配置。
使用ssh-keygen生成一組公私秘鑰對(duì)
ssh-keygen -t rsa -C "Github 的郵箱地址"
如 ssh-keygen -t rsa -C "123@gmail.com"
- 配置公鑰,配置路徑:github你的首頁(yè)–>Settings–>SSH and GPG keys
- 配置私鑰,項(xiàng)目私有倉(cāng)庫(kù)的Settings->Secrets里添加私鑰,名稱(chēng)為PRIVATE_KEY
二、新建項(xiàng)目倉(cāng)庫(kù)
在倉(cāng)庫(kù)的Actions選項(xiàng)卡下點(diǎn)擊新建.github/workflow/blank.yml
,名稱(chēng)默認(rèn)或者自定義修改,配置如下:
# This is a basic workflow to help you get started with Actions
name: Deploy My Server
on:
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: use Node.js
# 使用action庫(kù) actions/setup-node安裝node
uses: actions/setup-node@v1
with:
node-version: 16.x
# 安裝依賴(lài)
- name: npm install
run: npm install
# 打包
- name: npm build
run: npm run build
# 部署到服務(wù)器
- name: deploy
uses: easingthemes/ssh-deploy@v2.1.1
env:
# 本地.ssh文件下的私鑰id_rsa,存在secrets的PRIVATE_KEY中
SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
# 復(fù)制操作的參數(shù)。"-avzr --delete"意味部署時(shí)清空服務(wù)器目標(biāo)目錄下的文件
ARGS: "-avzr --delete"
# 源目錄,相對(duì)于$GITHUB_WORKSPACE根目錄的路徑
SOURCE: "./public/"
# 服務(wù)器域名/IP
REMOTE_HOST: ${{ secrets.HOST }}
# 服務(wù)器默認(rèn)用戶名為root
REMOTE_USER: "root"
# 目標(biāo)目錄
TARGET: '/usr/local/xxx/dist'
# 排除目錄
EXCLUDE: "/node_modules/"
參數(shù)項(xiàng):
- 部署到云服務(wù)器上需要用到 easingthemes/ssh-deploy@main
- SSH_PRIVATE_KEY: 是在服務(wù)器上生成的 SSH 私鑰,可以使用命令 ssh-keygen -m PEM -t rsa -b 4096 生成,并配置到倉(cāng)庫(kù)的 Secrets 中。
- ARGS: 默認(rèn)即可。
- SOURCE: 需要上傳到服務(wù)器上的文件的目錄。
- REMOTE_HOST: 服務(wù)器公網(wǎng) IP 或域名。
- REMOTE_USER: 服務(wù)器 SSH 用戶名。
- TARGET: 文件上傳到服務(wù)器上保存的目錄。
- EXCLUDE: 可指定部分文件不上傳。
文件同步原理請(qǐng)參考rsync教程文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-803313.html
三、push分支到倉(cāng)庫(kù)
push內(nèi)容到倉(cāng)庫(kù)后,Action會(huì)自動(dòng)執(zhí)行工作流,此時(shí)你再看看你配置的TARGET服務(wù)器目錄,就會(huì)發(fā)現(xiàn)文件dist
被拷貝過(guò)去了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-803313.html
到了這里,關(guān)于GitHub Action 通過(guò)SSH 自動(dòng)部署到云服務(wù)器上的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!