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