本教程主要講解了怎麼使用 Jenkins 和 Github Actions 部署前端項目。前端
閱讀本教程並不須要你提早了解 Jenkins 和 Github Actions 的知識,只要按照本教程的指引,就可以實現自動化部署項目。node
PS:本人所用電腦操做系統爲 windows,即如下全部的操做均在 windows 下運行。其餘操做系統的配置大同小異,不會有太大差異。linux
Gitea 用於構建 Git 局域網服務器,Jenkins 是 CI/CD 工具,用於部署前端項目。git
gitea-1.13-windows-4.0-amd64.exe
下載。localhost:3000
就能看到 Gitea 已經運行在你的電腦上了。SQLite3
。另外把 localhost
改爲你電腦的局域網地址,例如個人電腦 IP 爲 192.168.0.118
。custom\conf\app.ini
,在裏面加上一行代碼 START_SSH_SERVER = true
。這時就可使用 ssh 進行 push 操做了。
git config --global --unset http.proxy git config --global --unset https.proxy
Logon Type
時,選擇第一個。
http://localhost:8000
網站,這時須要等待一會,進行初始化。
Manage Jenkins
-> Manage plugins
安裝插件。
可選插件
,輸入 nodejs,搜索插件,而後安裝。Manage Jenkins
-> Global Tool Configuration
配置 nodejs。若是你的電腦是 win7 的話,nodejs 版本最好不要過高,選擇 v12 左右的就行。
npm init -y
,初始化項目。npm i express
下載 express。server.js
文件,代碼以下:const express = require('express') const app = express() const port = 8080 app.use(express.static('dist')) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) })
它將當前目錄下的 dist
文件夾設爲靜態服務器資源目錄,而後執行 node server.js
啓動服務器。github
因爲如今沒有 dist
文件夾,因此訪問網站是空頁面。
不過不要着急,一會就能看到內容了。web
新建 Item
建立項目。
源碼管理
,輸入你的 Gitea 上的倉庫地址。
execute windows batch command
,linux 要選 execute shell
。
npm i && npm run build && xcopy .\build\* G:\node-server\dist\ /s/e/y
,這行命令的做用是安裝依賴,構建項目,並將構建後的靜態資源複製到指定目錄 G:\node-server\dist\
。這個目錄是靜態服務器資源目錄。
build now
。
http://localhost:8080/
看一下結果。
使用流水線構建項目能夠結合 Gitea 的 webhook
鉤子,以便在執行 git push
的時候,自動構建項目。shell
設置
。
新建 Item
建立項目。
構建觸發器
,選擇觸發遠程構建
,填入剛纔建立的 token。
保存
。
jenkins.xml
文件,找到 <arguments>
標籤,在裏面加上 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
。它的做用是關閉 CSRF
驗證,不關的話,Gitea 的 webhook
會一直報 403 錯誤,沒法使用。加好參數後,在該目錄命令行下輸入 jenkins.exe restart
重啓 Jenkins。
匿名用戶具備可讀權限
,再保存。倉庫設置
。
管理 web 鉤子
,添加 web 鉤子,鉤子選項選擇 Gitea
。添加 web 鉤子
。
Jenkinsfile
文件,此時構建是不會成功的。因此接下來須要配置一下 Jenkinsfile
文件。將如下代碼複製到你 Gitea 項目下的 Jenkinsfile
文件。jenkins 在構建時會自動讀取文件的內容執行構建及部署操做。pipeline { agent any stages { stage('Build') { steps { // window 使用 bat, linux 使用 sh bat 'npm i' bat 'npm run build' } } stage('Deploy') { steps { bat 'xcopy .\\build\\* D:\\node-server\\dist\\ /s/e/y' // 這裏須要改爲你的靜態服務器資源目錄 } } } }
push
操做時,Gitea 都會經過 webhook
發送一個 post 請求給 Jenkins,讓它執行構建及部署操做。
若是你的操做系統是 Linux,能夠在 Jenkins 打包完成後,使用 ssh 遠程登陸到阿里雲,將打包後的文件複製到阿里雲上的靜態服務器上,這樣就能實現阿里雲自動部署了。具體怎麼遠程登陸到阿里雲,請看下文中的 《Github Actions 部署到阿里雲》 一節。數據庫
若是你的項目是 Github 項目,那麼使用 Github Actions 也許是更好的選擇。express
接下來看一下如何使用 Github Actions 部署到 Github Page。npm
在你須要部署到 Github Page 的項目下,創建一個 yml 文件,放在 .github/workflow
目錄下。你能夠命名爲 ci.yml
,它相似於 Jenkins 的 Jenkinsfile
文件,裏面包含的是要自動執行的腳本代碼。
這個 yml 文件的內容以下:
name: Build and Deploy on: # 監聽 master 分支上的 push 事件 push: branches: - master jobs: build-and-deploy: runs-on: ubuntu-latest # 構建環境使用 ubuntu steps: - name: Checkout uses: actions/checkout@v2.3.1 with: persist-credentials: false - name: Install and Build # 下載依賴 打包項目 run: | npm install npm run build - name: Deploy # 將打包內容發佈到 github page uses: JamesIves/github-pages-deploy-action@3.5.9 # 使用別人寫好的 actions with: # 自定義環境變量 ACCESS_TOKEN: ${{ secrets.VUE_ADMIN_TEMPLATE }} # VUE_ADMIN_TEMPLATE 是個人 secret 名稱,須要替換成你的 BRANCH: master FOLDER: dist REPOSITORY_NAME: woai3c/woai3c.github.io # 這是個人 github page 倉庫 TARGET_FOLDER: github-actions-demo # 打包的文件將放到靜態服務器 github-actions-demo 目錄下
上面有一個 ACCESS_TOKEN
變量須要本身配置。
settings
。
developer settings
。
Personal access tokens(我的訪問令牌)
。
Generate new token(生成新令牌)
。
repo
。
Generate token
,並將生成的 token 保存起來。
settings
。
點擊 secrets
->new secret
。
建立一個密鑰,名稱隨便填(中間用下劃線隔開),內容填入剛纔建立的 token。
將上文代碼中的 ACCESS_TOKEN: ${{ secrets.VUE_ADMIN_TEMPLATE }}
替換成剛纔建立的 secret 名字,替換後代碼以下 ACCESS_TOKEN: ${{ secrets.TEST_A_B }}
。保存後,提交到 Github。
之後你的項目只要執行 git push
,Github Actions 就會自動構建項目併發布到你的 Github Page 上。
Github Actions 的執行詳情點擊倉庫中的 Actions
選項查看。
具體詳情能夠參考一下個人 demo 項目 github-actions-demo。
構建成功後,打開 Github Page 網站,能夠發現內容已經發布成功。
root
(默認用戶名),密碼爲你剛纔重置的實例密碼sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install npm
sudo npm install -g n
sudo n stable
mkdir node-server // 建立 node-server 文件夾 cd node-server // 進入 node-server 文件夾 npm init -y // 初始化項目 npm i express touch server.js // 建立 server.js 文件 vim server.js // 編輯 server.js 文件
將如下代碼輸入進去(用 vim 進入文件後按 i 進行編輯,保存時按 esc 而後輸入 :wq,再按 enter),更多使用方法請自行搜索。
const express = require('express') const app = express() const port = 3388 // 填入本身的阿里雲映射端口,在網絡安全組配置。 app.use(express.static('dist')) app.listen(port, '0.0.0.0', () => { console.log(`listening`) })
執行 node server.js
開始監聽,因爲暫時沒有 dist
目錄,先不要着急。
注意,監聽 IP 必須爲 0.0.0.0
,詳情請看部署Node.js項目注意事項。
阿里雲入端口要在網絡安全組中查看與配置。
請參考建立SSH密鑰對和綁定SSH密鑰對 ,將你的 ECS 服務器實例和密鑰綁定,而後將私鑰保存到你的電腦(例如保存在 ecs.pem 文件)。
打開你要部署到阿里雲的 Github 項目,點擊 setting->secrets。
點擊 new secret
secret 名稱爲 SERVER_SSH_KEY
,並將剛纔的阿里雲密鑰填入內容。
點擊 add secret 完成。
在你項目下創建 .github\workflows\ci.yml
文件,填入如下內容:
name: Build app and deploy to aliyun on: #監聽push操做 push: branches: # master分支,你也能夠改爲其餘分支 - master jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install Node.js uses: actions/setup-node@v1 with: node-version: '12.16.2' - name: Install npm dependencies run: npm install - name: Run build task run: npm run build - name: Deploy to Server uses: easingthemes/ssh-deploy@v2.1.5 env: SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }} ARGS: '-rltgoDzvO --delete' SOURCE: dist # 這是要複製到阿里雲靜態服務器的文件夾名稱 REMOTE_HOST: '118.190.217.8' # 你的阿里雲公網地址 REMOTE_USER: root # 阿里雲登陸後默認爲 root 用戶,而且所在文件夾爲 root TARGET: /root/node-server # 打包後的 dist 文件夾將放在 /root/node-server
保存,推送到 Github 上。
之後只要你的項目執行 git push
操做,就會自動執行 ci.yml
定義的腳本,將打包文件放到你的阿里雲靜態服務器上。
這個 Actions 主要作了兩件事:
若是仍是不懂,建議看一下個人 demo。