超詳細本地搭建 docker + jenkins 自動部署項目

目的

本地搭建 docker + jenkins 部署系統, 經過 githubwebhook 實現代碼自動化部署.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

image.png 控制檯輸入docker pull jenkinsci/blueocean,下載完成以後輸入docker images看到以下信息即安裝成功
image.pngdocker

啓動 jenkins

控制檯輸入docker run -d --name docker-jenkins -p 8008:8080 -p 50000:50000 jenkinsci/blueocean 啓動容器,啓動成功會返回該容器 idshell

image.png 瀏覽器打開本地 8008 端口,正常狀況下會出現解鎖jenkins頁面npm

image.png

獲取初始化密碼

下一步須要進入容器內拿到密碼,以我剛剛啓動的容器爲例,控制檯輸入docker exec -it docker-jenkins bash進入容易內,而後輸入cat /var/jenkins_home/secrets/initialAdminPasswordjson

image.png

輸入控制檯返回的密碼進入配置頁面,這裏選擇安裝推薦的插件,可能會有安裝失敗的插件,重試便可windows

image.png

建立用戶

插件安裝完成後,輸入信息建立用戶瀏覽器

image.png 實例配置不變繼續點擊下一步,此時須要重啓動,重啓完成登陸剛剛建立的用戶便可,接下來進行配置環節

image.png

配置

下面對 github 以及 jenkins 進行配置

在容器內生成 ssh 公鑰

進入docker-jenkins容器內,輸入ssh-keygen -t rsa -C test@test.com,連續回車生成公鑰

2021-05-27 16.01.11.gif

添加公鑰 ☞ github

右上角頭像 -> settings -> 左側SSH and GPG keys -> New SSH key
image.png title 隨意, key 欄輸入複製的公鑰

添加私鑰 ☞ jenkins

這一步須要注意,須要用剛剛生成的私鑰建立一個 jenkins 憑證

注意: 私鑰上下的開始以及的標記內容也要一塊兒拷貝

首頁 -> 左側系統管理 -> Manage Credentials -> 添加憑據

2021-05-27 16.25.02.gif

注意: 類型選擇 SSH Username with private key, 描述以及 Username 隨意

建立任務

首頁 -> 新建任務 -> 輸入任務名稱 -> 構建一個自由風格的軟件項目 -> 肯定
正常狀況能夠看到這個頁面

image.png 源碼管理選擇 Git -> 輸入遠程倉庫地址 -> 選擇以前添加的憑證 -> 分支指定 master -> 保存

2021-05-27 16.37.30.gif

注意: 這一步輸入遠程倉庫以後會測試鏈接,未選擇憑證會報錯誤信息,選擇憑證後,若是配置正確,短暫的時間以後錯誤信息會消失,表明遠程倉庫鏈接成功.若錯誤信息不消失,可能會構建項目失敗,需檢查配置是否正確.分支信息我這裏指定的 master

嘗試項目構建

首頁 -> 構建項目 -> 查看日誌
若是配置正確,能夠看到構建完成最終的狀態爲: Finished: SUCCESS

2021-05-27 16.49.37.gif
進行到這一步實現了手動構建,接下來實現自動構建

自動化配置

完成自動化部署,主要是經過 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

image.png
注意拷貝生成的 token,離開就消失了

image.png

配置 github

配置倉庫的 web-hook:
倉庫首頁 -> settings -> 左側 webhooks -> add webhook

image.png

注意: 這裏的 Payload URL只能使用公網域名,因爲本次搭建的是本地 jenkins 環境,所以須要使用內網穿透工具,我用的是蜻蜓映射.

Payload URL: 輸入當前jenkins容器運行端口映射出去的公網域名 + /github-webhook/
Content type: 選擇 application/json
Secret: 填入剛剛生成的 token 其他默認

配置jenkins

首先建立一個憑證: 首頁 -> 系統管理 -> Manage Credentials -> 添加憑據 -> 選擇 Secret text

2021-05-27 20.33.55.gif
而後對改憑證進行配置:
首頁 -> 系統配置 -> GitHub -> 高級 -> 覆蓋 Hook URL -> 輸入 web-hook 地址 -> 選中建立的憑證

2021-05-27 20.39.12.gif
完成配置後,代碼倉庫更新以後 jenkins 會自動進行構建

打包項目

項目代碼須要打包以後才能被正確使用,接下來在 jenkins 端進行代碼構建操做
首頁 -> 系統管理 -> 插件管理 -> 可選插件 -> 選中 NodeJS 以及 Publish Over SSH -> 安裝 -> 等待安裝完成

  • NodeJS: 代碼運行環境
  • Publish Over SSH: 打包完成後發送到服務器

2021-05-27 19.11.06.gif

拉取代碼進行打包

首先配置全局 NodeJS 插件:
首頁 -> 系統管理 -> 全局工具配置 -> NodeJS -> 新增
2021-05-27 19.18.15.gif
構建項目中新增 NodeJS 構建環境:
項目配置 -> 構建環境 -> 選擇剛剛配置的 node 環境 -> 構建 -> 執行 shell -> 安裝依賴 -> 打包 -> 壓縮

echo "hello world"
npm install
npm run build
cd dist
tar zcvf dist.tar.gz ./*
複製代碼

2021-05-28 10.29.59.gif

配置完以後手動點擊構建,查看日誌查看構建狀態,操做成功能夠進到 docker-jenkins容器內部檢查 dist.tar.gz 文件是否存在

image.png

發送到服務器

全局配置 publish over ssh 插件

首頁 -> 系統管理 -> 系統配置 -> Publish over SSH -> SSH Servers
2021-05-28 15.19.21.gif 這裏我是用的是用戶密碼登陸,也可以使用 ssh 的方式鏈接服務器.輸入完畢能夠進行鏈接測試

項目中配置

項目配置 -> 構建後操做 -> SSH Server -> Transfers

Source files: 發送的文件(相對路徑爲當前項目路徑)
Remove prefix: 要去掉的前綴
Remote directory: 遠端服務器目錄(不存在會報錯)
Exec command: 發送成功以後要在服務器進行的腳本操做,如:解壓,刪掉多餘的文件
複製代碼

2021-05-28 15.33.04.gif 貼上腳本代碼

cd 文件發送的目錄
tar zxvf dist.tar.gz
rm -rf dist.tar.gz
複製代碼

最後嘗試推送代碼,驗證自動化構建部署~

image.png 正常狀況下服務器上會收到發送的文件,到這一步本地全自動構建成功啦

相關文章
相關標籤/搜索