摘要:自動部署基礎實踐熟悉的基本操作實現本地后自動構建部署服務此實踐用于優化自己在實際工作中的工作流在本地開發到服務器登錄云服務器或者簡化流程后本地開發云服務器自動構建部署本實踐將結合技術來實現云服務器對各種環境的切換與部署。
Docker + Jenkins + webhooks 自動部署基礎實踐
熟悉 jenkins 的基本操作 ??
實現本地 git push 后 jenkins 自動構建部署服務 ??
此實踐用于優化自己在實際工作中的工作流:
在本地開發 project
git push project 到 git 服務器
登錄云服務器 git pull project
pm2 restart project 或者 node app.js
簡化流程后:
本地開發 project
git push
云服務器自動構建部署
本實踐將結合 docker 技術來實現云服務器對各種環境的切換與部署。
基本原理:
webhook 即為一個 url。 配合 jenkins, 你的 git 服務器會在有新提交的時候請求這個 url, 而這個 url 背后對應著 jenkins 內的構建任務, 如此便實現了自動化構建。docker 及 jenkins 安裝在本例中使用 docker 主要是為了確立運行環境的獨立性, 這里主要是為了便于安裝 jenkins 。 當然你也可以直接 yum install jenkins 把他安裝在云服務器上。
沒有使用 Jenkinsfile 或 blue ocean 來部署的原因是對開啟 webhook 不太友好「或許說是流程沒有這樣簡單順暢」。
我的服務器是 centos7.4, ssh 連接服務器后用命令行安裝 docker
yum install docker -y
service docker start
Jenkins 是一個用 Java 寫的開源的持續集成軟件。
為了避免安裝各種各樣的 Java 依賴, 我們直接安裝 Jenkins 鏡像, 并映射在云服務器的 8080 端口
我們依據 Jenkins 官方的教程 來安裝。 我安裝的是集成 blue ocean 版的鏡像
docker run --rm -u root -d -p 8080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v "$HOME":/home -v /root:/root jenkinsci/blueocean
后臺運行并映射到服務器 8080 端口, 掛載服務器的 jenkins-data 文件夾到 jenkins 容器內, /var/run/docker.sock 用來監聽 docker 的連接
相比 Jenkins 原教程, 我在這里額外添加了 -d 、 -v /root:/root 命令, -d 命令用于后臺啟動 Jenkins, -v /root:/root 用于掛載服務器的 root 文件夾到主機的 root 文件夾下
同時在我們的服務器內生成 ssh 秘鑰「用于 jenkins 拉取 git 項目的授權」
cat ~/.ssh/id_rsa.pub
ssh-keygen -t rsa -C "youremail"
cat ~/.ssh/id_rsa.pub
復制秘鑰, 粘貼到 git 服務器內的 sshKeys 內, 這樣 jenkins 就能在你每次 git push 后自動拉取你的 project 了。
稍等片刻, 在瀏覽器打開 8080 端口, 配置 jenkins
需要我們在 docker 內以命令行模式進入 jenkins 容器內獲取密碼
docker ps
找到出 jenkins/blueocean 容器的id
docker exec -it id sh
id 是你 docker ps 后 jenkins/blueocean 容器的 id
cd /var/jenkins_home/secrets/initialAdminPassword
查看密碼, 填寫到頁面上
設置 Jenkins 安全策略,取消防止跨站點請求偽造并保存「這樣才能遠程執行 webhooks」
在 jenkins/插件管理內安裝兩個插件
generic webhook trigger 和 post build task
首先在你的 project 內新建 Dockerfile 文件, 內容如下:
# 拉取一個基本 node 運行環境的鏡像,作為基礎鏡像 FROM node:7-alpine RUN mkdir -p /app COPY . /app WORKDIR /app RUN npm install EXPOSE 3000 # 開啟 node 服務器 CMD ["node", "app.js"]
我們利用 node:7-alpine 鏡像重新生成一個自己的鏡像
app.js 是我的啟動文件,內容如下:
const http = require("http") http.createServer((req, res) => { res.end("jenkins t2") }).listen(3000, () => { console.log("running on port 3000"); })
ok, 設置好 project 的基本服務后, 瀏覽器打開 jenkins 新建一個項目
開始設置 project 信息, 如果你沒有把前面生成的 sshkey 添加到你的 git 服務器中, 這個 project 將無法設置
然后設置 webhooks 的 token , 并勾選下方的 generic webhook trigger。
然后依據 generic webhook trigger 給出的提示把 你的服務器地址:8080/job/t1/build?token=你的token 這個hook 添加到你的 git 服務器上的 webhook 設置內。
設置構建任務, 這里我用 docker 構建一個叫 frontend 的鏡像, 在構建好鏡像后運行一個叫 express 的容器 「這里先要殺掉前一個叫 express 的容器,才能運行新的容器,因為如果每次構建時前一個容器還在運行即端口一直被占用著會導致運行失敗」。
構建 docker 容器時記得加參數 -d 不然構建任務會阻塞 jenkins 任務隊列。
保存修改,在本地修改代碼,并推送到 git 服務器,發現 Jenkins 開啟了自動構建。
其它我的 git 服務器是 alicode 「一個 gitlab 服務, 可以放置私有 project, 當然你也可以自己搭建一個 gitlab」。
如果你使用其它 git 服務流程也大同小異, 例如 github 、 bitbucket 等等。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27249.html
摘要:如果還沒有搭建好可以使用的,請先移步到這篇文章進行搭建使用自動部署服務一搭建篇目標通過實現推送代碼后自動部署基于的服務準備工作獲取示例項目或者直接復制以下文件內容獲取示例項目項目文件頁面文件鏡像文件部署文件部署腳本文件頁面文件項目很簡單, 如果還沒有搭建好可以使用 Docker 的 Jenkins,請先移步到這篇文章進行搭建 使用 Jenkins 自動部署 Docker 服務(一、Je...
摘要:為了看起來清晰,我寫了一個文件,將這個文件和之前的放在同一個目錄中,可以用以下命令快速啟動,啟動之后新構建的鏡像和容器都名為。 showImg(https://segmentfault.com/img/remote/1460000014924499?w=883&h=515); 在軟件開發過程中,如果我們每一次提交的代碼都能夠進行一次完整的編譯、測試、打包、發布,就能及早發現問題、及早修...
1.準備環境 一臺有網絡的Linux 服務器 Docker rpm安裝包,依賴包 libcgroup jdk1.7 OR 1.8環境下載 Jenkins WAR包下載 NodeJs 源碼包下載 依賴下載地址: https://pkgs.org/download/ https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 2.安裝D...
摘要:部分首先我們要有個咯下載鏈接我們安裝官網教程安裝好安裝教程略嗯不是說好手把手么你妹的好好好我們還是來手把手教程好了首先安裝添加安裝源之后直接就好下面是的安裝命令其他系統自己玩一下就好下載啟動下載鏈接在這里面找最新的下載我當前 Jenkins部分 首先,我們要有個Jenkins咯,下載鏈接:https://jenkins.io/download/ 我們安裝官網教程安裝好jenkins,安...
摘要:使用自動構建部署環境阿里云,宿主機服務器安裝,在安全規則中確認端口開啟。完畢后,根據提示設置登陸賬戶。至此,完成自動化的構建和部署。當你推送代碼后就會實現自動構建,部署。容器出錯的是鏡像構建和鏡像運行,以及容器間通信的問題。 使用Docker+Jenkins自動構建部署 環境 阿里云ESC,宿主機服務器安裝Docker,在安全規則中確認8080端口開啟。 客戶端mac 運行jenk...
閱讀 1747·2021-10-13 09:39
閱讀 1316·2019-08-30 13:58
閱讀 1411·2019-08-29 16:42
閱讀 3560·2019-08-29 15:41
閱讀 2990·2019-08-29 15:11
閱讀 2469·2019-08-29 14:10
閱讀 3404·2019-08-29 13:29
閱讀 2086·2019-08-26 13:27