node項目自動化部署--基於Jenkins,Docker,Github(3)自動化部署
GitHub倉庫
由於現在的代碼基本上都是多人合作開發,所以肯定會用到像 git 這樣的版本控制工具
所以這裏使用 GitHub 來做一個演示
首先我們需要在github上新建一個倉庫
點擊New來新建一個倉庫
輸入一個名字
以及描述後點擊 create
然後將代碼上傳到GitHub上
這裏我上傳的是一個簡單的 hello world 的demo
到這裏要部署的代碼就準備完成了,接下來需要編寫 Dockerfile 來告訴 docker 該怎麽打包我們的項目
Dockerfile編寫
首先我們在項目的根目錄下添加一個 Dockerfile 文件
該文件代碼如下:
FROM node:alpine MAINTAINER [email protected] ENV TZ = Asia/Shanghai #將代碼移動到容器中的 /ndoe 路徑下 COPY . /node #指定工作目錄 WORKDIR /node #安裝PM2 RUN npm install pm2 -g #指定時區 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #暴露容器的3000端口 EXPOSE 3000 #啟動服務CMD [ "pm2-runtime", "npm", "--", "start" ]
這裏需要註意,最好在 package.json中完成依賴的安裝,不然路徑上很可能出現問題
完整項目代碼:https://github.com/lhy2813419591/JenkinsTest
上述代碼中 Expose 暴露的端口就是你的項目監聽的端口
至於時區的設置根據大家的需求自己決定是否設置
這裏我是使用了 在鏡像中 使用 pm2 來托管我的項目
雖然docker可以給我們一個相對獨立的環境,但平滑啟動等功能並不提供,所以這裏我使用了 pm2 來啟動項目
Jenkins構建
剛才初步的準備工作已經完成了
接下來就需要創建 Jenkins 的構建任務
這裏輸入構建任務的名稱
選擇自由風格的項目,然後點擊確定進入下一步
然後勾選限制項目運行的節點
輸入你希望該構建運行的服務器節點(在之前 over publish中添加的服務器)
輸入過後會告訴你選中了幾個節點
然後就是源碼管理選擇 git
沒有憑據的需要先添加憑據
然後設置構建觸發器,這裏如果需要當git上面有新的 push 的時候就自動構建
則需要設置構建出發器,不需要的小夥伴可以自行跳過
身份驗證令牌設置如下:
jenkins --> 首頁 --> 用戶
設置 --> 點擊 "show API Token"
這樣就獲取了一個 Api Token 將其復制到身份驗證令牌處即可
設置完身份驗證令牌後我們需要進入 github進行相關設置
進入setting 後選擇 webhook
然後添加 webhook
這裏的url在 Jenkins 上可以看到
把這個路徑復制到github
如果出現403則需要設置一下用戶權限
在全局安全設置中允許匿名用戶操作
我這裏為了方便就直接設置為所有用戶可以做任何事
然後回到github
點擊redeliver
然後看到201就說明配置完成了
這樣我們就只差最後的執行腳本了
我們回到 Jenkins 繼續進行設置
接下來要設置的是構建環境
這裏需要填寫的實際上只用填寫遠程工作目錄以及構建完成後執行的命令行語句
cd /root/jenkins/workspace/JenkinsTest #訪問指定的遠程工作目錄 sudo docker stop node #停止名為node的容器 sudo docker rm node #移除名為node的容器 sudo docker rmi node #移除名為node的鏡像 sudo docker build --rm --no-cache=true --tag node /root/jenkins/workspace/JenkinsTest #build鏡像,並命名為node sudo docker run -dit --name node -p 9001:3000 -v /root/jenkins/workspace/JenkinsTest:/node node #運行名為node的鏡像,將容器的3000端口映射到9001端口
如下圖所示
保存後點擊立即構建即可執行,不需要push來觸發
然後訪問部署節點的 9001 端口就能訪問自動構建的 express 項目
如果步驟沒有問題,但無法訪問項目建議前往服務器的控制臺查看安全組規則,開放對應的端口
查看項目的日誌信息
docker logs node #node是容器的name
完整代碼:https://github.com/lhy2813419591/JenkinsTest
node項目自動化部署--基於Jenkins,Docker,Github(3)自動化部署