從零搭建docker+jenkins+node.js自動化部署環境

lentoo發表於2018-09-04

本次案例基於CentOS 7系統

適合有一定docker使用經驗的人閱讀

適合有一定linux命令使用經驗的人閱讀

1、docker部分

1.1、docker簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面

1.2、docker架構

簡單的說,docker就是一個輕量級的linux系統。Docker 容器通過 Docker 映象來建立。容器與映象的關係類似於物件導向程式設計中的物件與類。docker架構如圖所示:

從零搭建docker+jenkins+node.js自動化部署環境

1.3、docker虛擬機器管理命令

從零搭建docker+jenkins+node.js自動化部署環境

1.4、安裝docker

  1. 更新軟體庫
    yum update -y
複製程式碼
  1. 安裝docker
    yum install docker -y
複製程式碼

1.5、啟動docker服務

  1. 啟動docker服務
    service docker start
複製程式碼
  1. 其它相關命令
    service docker restart  // 重啟docker服務
    service docker stop     // 停止docker服務
複製程式碼

2、node部分

可以通過koa框架隨便寫一個hello-world專案,然後在專案的根目錄下新建一個Dockerfile檔案

Dockerfile 是一個文字檔案,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

筆者自己的Dockerfile檔案配置資訊如下,熟悉docker的人可以自行配置

# Dockerfile
# 使用node做為映象
FROM node
# 在容器中建立該目錄
RUN mkdir -p /home/project
# 設定容器的工作目錄為該目錄
WORKDIR /home/project 
# 向外提供3000埠
EXPOSE 3000
# 容器建立完成後執行的命令
CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js
複製程式碼

將該專案釋出到github上,為之後的jenkins部署做前提準備

3、jenkins部分

  • 查詢jenkins映象
    docker search jenkins 
複製程式碼

從零搭建docker+jenkins+node.js自動化部署環境

  • 拉取最新的jenkins映象
    docker pull jenkins:latest
複製程式碼
  • 啟動jenkins
	sudo docker run -d -u 0 --privileged  --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest
複製程式碼
  • 命令解析:
  1. -u 0

指的是傳入root賬號ID,覆蓋容器中內建的賬號 2. -v /root/jenkins_node1:/var/jenkins_home

指的是 將docker容器內的目錄/var/jenkins_home對映到宿主機 /root/jenkins_node1目錄上

  1. --name jenkins_node1

將容器命名為 jenkins_node1

  1. -p 49003:8080

埠對映,將容器的8080埠對映到宿主機的49003埠

  1. --privileged

賦予最高許可權

  • 整條命令的意思

執行一個映象為jenkins:latest的容器,命名為jenkins_node1,使用root賬號覆蓋容器中的賬號,賦予最高許可權,將容器的 /var/jenkins_home對映到宿主機的 /root/jenkins_node1目錄下,對映容器中8080埠到宿主機49003

  • 檢視jenkins

執行完成後,等待幾十秒,等待jenkins容器啟動初始化。

可以檢視宿主機 /root/jenkins_node1下是否多了很多檔案

到瀏覽器中輸入 localhost:49003 檢視jenkins是否啟動成功

看到如下介面說明啟動成功:

從零搭建docker+jenkins+node.js自動化部署環境

  • 獲取密碼
cat /root/jenkins_node1/secrets/initialAdminPassword
複製程式碼

複製輸出的密碼,貼上到頁面中,點選continue會進入到下面這個頁面

從零搭建docker+jenkins+node.js自動化部署環境

點選安裝

從零搭建docker+jenkins+node.js自動化部署環境

等待安裝完成,進入到建立管理員賬號介面

從零搭建docker+jenkins+node.js自動化部署環境

輸入賬號密碼資訊後點選儲存(資訊要填完),來到首頁

從零搭建docker+jenkins+node.js自動化部署環境

配置jenkins,進入系統管理頁面,管理外掛

從零搭建docker+jenkins+node.js自動化部署環境

選擇 ssh外掛,

從零搭建docker+jenkins+node.js自動化部署環境

直接安裝,等待安裝完成,回到首頁,

來到 系統管理 -> 系統配置

從零搭建docker+jenkins+node.js自動化部署環境

拖到最下Publish over SSH這

從零搭建docker+jenkins+node.js自動化部署環境

選擇高階,輸入伺服器IP,使用者名稱,密碼,然後點選 Test Configuration

顯示 Success 則說明配置沒問題。然後儲存,回到首頁

新建一個專案

從零搭建docker+jenkins+node.js自動化部署環境

輸入專案名稱

從零搭建docker+jenkins+node.js自動化部署環境

選擇原始碼管理,使用git管理,輸入github倉庫地址,新增github使用者

從零搭建docker+jenkins+node.js自動化部署環境

從零搭建docker+jenkins+node.js自動化部署環境

從零搭建docker+jenkins+node.js自動化部署環境

完成來到選擇構建環境,

從零搭建docker+jenkins+node.js自動化部署環境

執行的命令

sudo docker stop nodeapp || true \
 && sudo docker rm nodeapp || true \
 && cd /root/jenkins_node1/workspace/node  \
 && sudo docker build --rm --no-cache=true  -t node  - < Dockerfile \
 && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project node
複製程式碼

儲存後,點選立即構建

構建成功後,可以在宿主機的目錄/root/jenkins_node1/workspace/node下看到你的專案檔案了

在瀏覽器輸入 docker伺服器地址 localhost:3000 即可訪問到頁面資訊

啟動失敗的,可以檢視日誌來確定一下失敗的原因

docker logs nodeapp
複製程式碼

4、jenkins + github自動部署

如果想原生程式碼提交push到github後,jenkins自動拉取最新程式碼重新部署,請繼續看

伺服器要外網能訪問,本地環境想測試的可以嘗試內網穿透 natapp 或者 ngrok

  1. 在首頁點選使用者

首頁 -> 使用者 -> root

從零搭建docker+jenkins+node.js自動化部署環境

  1. 點選設定 -> show API Token

從零搭建docker+jenkins+node.js自動化部署環境

  1. 複製API Token 裡面的值

  2. 返回到首頁 -> node -> 配置 -> 構建觸發器 貼上到身份驗證令牌 中

從零搭建docker+jenkins+node.js自動化部署環境

  1. 登陸到你的github專案頁面 開啟 Setting -> Webhooks -> Add webhooks

從零搭建docker+jenkins+node.js自動化部署環境

  1. 新增 webhooks

從零搭建docker+jenkins+node.js自動化部署環境

  1. 修改jenkins的安全策略

jenkins首頁,選擇 系統管理-->Configure Global Security(系統設定下面那個) 進行如下設定

從零搭建docker+jenkins+node.js自動化部署環境

至此,已完成 git push 後,jenkins 自動構建自動部署。

5、docker的常用命令

對docker比較感興趣的人可以瞭解一下,繼續學習

映象相關

  • 查詢映象
docker search [name]
複製程式碼
  • 拉取映象
docker pull [name]
複製程式碼
  • 匯入映象
docker load < /home/node.tar.gz
複製程式碼
  • 匯出映象
docker save > /home/node.tar.gz
複製程式碼
  • 查詢所有映象
docker images
複製程式碼
  • 刪除映象
docker rmi [name]
複製程式碼
  • 修改映象名
docker tag docker.io/node node
複製程式碼

容器相關

  • 啟動
# 執行並進入互動模式
docker run -it --name myjava java bash 
# 在後臺執行
docker run -d --name myjava java
複製程式碼
  • 埠對映
docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash
複製程式碼
  • 目錄對映
docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash
複製程式碼
  • 進入後臺執行的容器
docker exec -it name bash
複製程式碼
  • 自動重啟
docker  run --restart=always -it --name myjava -p 9000:8085 -p 9000:8086 java bash
複製程式碼
  • 暫停容器
docker pause node
複製程式碼
  • 停止暫停容器
docker unpause node
複製程式碼
  • 停止容器
docker stop node 
複製程式碼
  • 啟動容器
docker start -i node
複製程式碼
  • 檢視容器
docker ps -a
複製程式碼

docker網段相關

  • 建立網段
docker network create net1
複製程式碼
  • 檢視網段資訊
docker network inspect net1
複製程式碼
  • 刪除網段資訊
docker network rm net1
複製程式碼

6、總結

筆者自己最近學習node,故想嘗試一下通過Docker+jenkins來實現這個自動化部署的流程,自己踩了一天坑,總算是配置成功了。之前是使用pm2來管理node專案,以及使用pm2來自動化部署node專案的,有興趣的可以去看一下。使用pm2自動化部署node專案.算是給自己做個總結筆記。寫的不好的地方,望指出。

公眾號

歡迎關注我的公眾號“碼上開發”,每天分享最新技術資訊。關注獲取最新資源

從零搭建docker+jenkins+node.js自動化部署環境

相關文章