上篇,我們講到了 dockerfile 的最小實現,但也丟擲了一個問題,即使 docker 解決了環境和部署問題,但 CICD 還是讓人感到心累,本章通過 docker 生成 jenkins 容器,並將 jenkins 與 github 結合,實現 一定程度上的 CI
希望達到的效果
我希望我在 git push 後,程式碼推送至 jenkins ,在 jenkins 點選 釋出,就能將我的程式碼推送至 伺服器,我瀏覽頁面,馬上就能看到效果
git push 到倉庫,在 jenkins 上點選發布就能釋出。
jenkins 繫結 遠端倉庫 和 伺服器
git push 到 倉庫後,jenkins 監聽到,執行指令碼
刪除原來的容器,並生成一個新的容器 對映出埠
jenkins 快速入門
它是 java 語言寫的 cicd,
它是一套用 java 寫的 cicd 系統,通過 ssh 可以與伺服器打交道
實現思路
jenkins
實現步驟
第一步:拉取 jenkins 映象,以此為映象生成容器
第二步:安裝配置 jenkins
第三步:準備 node 服務
第四步:jenkins 部署 node 服務
第一步:生成 jenkins 容器
先從 dockerhub 上拉取 jenkins
docker pull jenkins/jenkins:lts
建立一個 jenkins 目錄
mkdir /home/johan/www/jenkins
提高此檔案的許可權
sudo chmod -R 777 /home/johan/www/jenkins
以 jenkins/jenkins:lts 為映象生成一容器
docker run --name jenkins -p 8080:8080 -p 50000:50000 -d -v /home/johan/www/jenkins:/var/jenkins_home jenkins/jenkins:lts
-d
: 後臺執行
-v
: 資料卷,將容器中的內容對映到本機上
檢視容器內部日誌
docker logs jenkins
輸入域名網址檢視 jenkins
是否安裝成功
看到 解鎖 jenkins,輸入 logs 中的密碼,即能解鎖
第二步:安裝配置 jenkins
按照安裝推薦外掛安裝 jenkins 的外掛
配合 jenkins
需要等一段時間,下載這些外掛
報錯就重試,咔咔就是幹
建立管理員賬號
儲存成功,開始使用 jenkins
換源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
前往 系統管理 ——> 外掛管理 ——> 高階 ——> 拉到最下面
下載 ssh 外掛
前往 系統管理 ——> 外掛管理 ——> 可選外掛
搜尋 "Publish over SSH",並安裝
配置 ssh
前往 系統管理 ——> 系統配置——> 拉到最下面(Publish over SSH)
使用密碼
點選 Test Configuration,已經和伺服器接通
安裝 nodejs 外掛
node 外掛在跑 node 專案時需要使用,這裡先安裝好
前往 系統管理 ——> 外掛管理 ——> 可選外掛
搜尋 node,並安裝
全域性配置 node
前往 系統管理 ——> 全域性工具配置 ——> NodeJS
應用並儲存它
關於 jenkins 的搭建到此告一段落
第三步:準備 node 服務
我們拿上一章講的 koa 為例子講解
生成 .gitignore
檔案,並寫入 node_modules
將 dockerfile_koa_demo 上傳至 github
git init
git add .
git commit -m 'first_commit'
git remote add origin https://github.com/johanazhu/dockerfile_koa_server.git
git push -u origin master
第四步: jenkins 部署 node 服務
建立一個任務
起任務名
任務描述
程式碼如下:
docker stop koa_server_container
docker rm koa_server_container
docker rmi johanbo/koa_server:v.1.0.0
cd /home/johan/www/jenkins/workspace/dockerfile_koa_server
docker build . -t johanbo/koa_server:v1.0.0
docker run -d --name koa_server_container -p 3011:3010 johanbo/koa_server:v1.0.0
解讀以上程式碼:
第一行:停止 koa_server_container 容器
第二行:刪除此容器
第三行:刪除生成此容器的映象
第四行:進入伺服器中的 jenkins 資料卷相對於的目錄
注意:dockerfile_koa_server
為你一開始建立該專案時的名字
第五行:生成一個名叫 johanbo/koa_server:v1.0.0 的映象
第六行:生成一個以 johanbo/koa_server:v1.0.0 為映象的名字叫做 koa_server_container 的容器,並將本機的 3011 埠與容器的 3010 做對映
應用並儲存
立即構建服務
發現成功,並且能看到“hello,docker“
在本地更改原檔案 app.js
app.use(async (ctx) => {
ctx.body = 'hello, docker, jenkins';
});
提交程式碼至 github
通過 jenkins 再次部署 node 服務
構建完成,重新整理瀏覽器,發現內容已經更換
PS:此服務現已下架
總結
在實際開發中其實踩了很多坑,雖然有很好的別人寫過的教程,但自己動手做時卻有各種限制,比如作業系統不同,祕鑰,jenkins 的 SSH 外掛,jenkins 裡支援 docker 命令的外掛整合問題等等
網上關於兩種的教程也有很多,但大多數是預設:jenkins 和應用部署在同一臺伺服器上,這樣就能在相對應的檔案中構建映象,
但如果 jenkins 和應用程式是部署在兩臺伺服器上該如何操作呢?留給下一個挑戰者
參考文章
- 怎樣用 Jenkins、Docker 和 CI/CD 構建無伺服器應用程式?
- 【手把手系列之】Jenkins+Docker 自動化部署 vue 專案
- Failed to add SSH key. Message “invalid privatekey” 問題
- jenkins 配置 publish over ssh 遇到的問題
- Build, Publish, Deploy and Test Docker images and containers with Jenkins Workflow
- Building Docker Images using Jenkins step by step | Devops Integration Live Demo | JavaTechie