本地搭建 docker + jenkins
部署系統, 經過 github
的 webhook
實現代碼自動化部署.node
docker
mac: docs.docker.com/docker-for-…
windows: docs.docker.com/docker-for-…
liunx:git
// 推薦腳本安裝方式
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
複製代碼
控制檯輸入 docker -v
, 顯示版本則安裝成功github
Docker version 20.10.5, build xxxxx
複製代碼
jenkins
控制檯輸入docker search jenkins
,選擇安裝jenkinsci/blueocean
鏡像,比較穩定.web
控制檯輸入docker pull jenkinsci/blueocean
,下載完成以後輸入docker images
看到以下信息即安裝成功
docker
jenkins
控制檯輸入docker run -d --name docker-jenkins -p 8008:8080 -p 50000:50000 jenkinsci/blueocean
啓動容器,啓動成功會返回該容器 idshell
瀏覽器打開本地 8008 端口,正常狀況下會出現解鎖jenkins
頁面npm
下一步須要進入容器內拿到密碼,以我剛剛啓動的容器爲例,控制檯輸入docker exec -it docker-jenkins bash
進入容易內,而後輸入cat /var/jenkins_home/secrets/initialAdminPassword
json
輸入控制檯返回的密碼進入配置頁面,這裏選擇安裝推薦的插件,可能會有安裝失敗的插件,重試便可windows
插件安裝完成後,輸入信息建立用戶瀏覽器
實例配置不變繼續點擊下一步,此時須要重啓動,重啓完成登陸剛剛建立的用戶便可,接下來進行配置環節
下面對 github 以及 jenkins 進行配置
進入docker-jenkins
容器內,輸入ssh-keygen -t rsa -C test@test.com
,連續回車生成公鑰
右上角頭像 -> settings -> 左側SSH and GPG keys
-> New SSH key
title 隨意, key 欄輸入複製的公鑰
這一步須要注意,須要用剛剛生成的私鑰建立一個 jenkins
憑證
注意: 私鑰上下的開始以及的標記內容也要一塊兒拷貝
首頁 -> 左側系統管理 -> Manage Credentials -> 添加憑據
注意: 類型選擇
SSH Username with private key
, 描述以及 Username 隨意
首頁 -> 新建任務 -> 輸入任務名稱 -> 構建一個自由風格的軟件項目 -> 肯定
正常狀況能夠看到這個頁面
源碼管理選擇 Git -> 輸入遠程倉庫地址 -> 選擇以前添加的憑證 -> 分支指定 master -> 保存
注意: 這一步輸入遠程倉庫以後會測試鏈接,未選擇憑證會報錯誤信息,選擇憑證後,若是配置正確,短暫的時間以後錯誤信息會消失,表明遠程倉庫鏈接成功.若錯誤信息不消失,可能會構建項目失敗,需檢查配置是否正確.分支信息我這裏指定的 master
首頁 -> 構建項目 -> 查看日誌
若是配置正確,能夠看到構建完成最終的狀態爲: Finished: SUCCESS
進行到這一步實現了手動構建,接下來實現自動構建
完成自動化部署,主要是經過 github-webhook
.簡單來講就是github-webhook
通知 jenkins
要進行構建了.
引用維基百科介紹
在web開發過程當中的webhook,是一種經過一般的callback,去增長或者改變web page或者web app行爲的方法。這些callback能夠由第三方用戶和開發者維持當前,修改,管理,而這些使用者與網站或者應用的原始開發沒有關聯。webhook這個詞是由Jeff Lindsay在2007年在計算機科學hook項目第一次提出的。
個人理解是相似於"發佈訂閱模式",github-webhook
發佈更新, jenkins
監聽,收到通知進行更新.不管發佈或者監聽,須要經過某種方式來肯定彼此的身份,進行關聯,所以須要對兩端進行配置.
右上角頭像 -> settings -> 左側 Developer settings -> Personal access tokens -> Generate new token
note 隨意填,勾選如下兩項,點擊 generate token
注意拷貝生成的 token,離開就消失了
配置倉庫的 web-hook:
倉庫首頁 -> settings -> 左側 webhooks -> add webhook
注意: 這裏的 Payload URL只能使用公網域名,因爲本次搭建的是本地 jenkins 環境,所以須要使用內網穿透工具,我用的是蜻蜓映射.
Payload URL
: 輸入當前jenkins
容器運行端口映射出去的公網域名 + /github-webhook/
Content type
: 選擇 application/json
Secret
: 填入剛剛生成的 token 其他默認
jenkins
首先建立一個憑證: 首頁 -> 系統管理 -> Manage Credentials -> 添加憑據 -> 選擇 Secret text
而後對改憑證進行配置:
首頁 -> 系統配置 -> GitHub -> 高級 -> 覆蓋 Hook URL -> 輸入 web-hook 地址 -> 選中建立的憑證
完成配置後,代碼倉庫更新以後 jenkins
會自動進行構建
項目代碼須要打包以後才能被正確使用,接下來在 jenkins
端進行代碼構建操做
首頁 -> 系統管理 -> 插件管理 -> 可選插件 -> 選中 NodeJS
以及 Publish Over SSH
-> 安裝 -> 等待安裝完成
NodeJS
: 代碼運行環境Publish Over SSH
: 打包完成後發送到服務器首先配置全局 NodeJS
插件:
首頁 -> 系統管理 -> 全局工具配置 -> NodeJS -> 新增
構建項目中新增 NodeJS
構建環境:
項目配置 -> 構建環境 -> 選擇剛剛配置的 node 環境 -> 構建 -> 執行 shell -> 安裝依賴 -> 打包 -> 壓縮
echo "hello world"
npm install
npm run build
cd dist
tar zcvf dist.tar.gz ./*
複製代碼
配置完以後手動點擊構建,查看日誌查看構建狀態,操做成功能夠進到 docker-jenkins
容器內部檢查 dist.tar.gz
文件是否存在
publish over ssh
插件首頁 -> 系統管理 -> 系統配置 -> Publish over SSH -> SSH Servers
這裏我是用的是用戶密碼登陸,也可以使用 ssh 的方式鏈接服務器.輸入完畢能夠進行鏈接測試
項目配置 -> 構建後操做 -> SSH Server -> Transfers
Source files: 發送的文件(相對路徑爲當前項目路徑)
Remove prefix: 要去掉的前綴
Remote directory: 遠端服務器目錄(不存在會報錯)
Exec command: 發送成功以後要在服務器進行的腳本操做,如:解壓,刪掉多餘的文件
複製代碼
貼上腳本代碼
cd 文件發送的目錄
tar zxvf dist.tar.gz
rm -rf dist.tar.gz
複製代碼
最後嘗試推送代碼,驗證自動化構建部署~
正常狀況下服務器上會收到發送的文件,到這一步本地全自動構建成功啦