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