博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker + Jenkins + webhooks 自动部署基础实践
阅读量:6671 次
发布时间:2019-06-25

本文共 2797 字,大约阅读时间需要 9 分钟。

Docker + Jenkins + webhooks 自动部署基础实践

  • 熟悉 jenkins 的基本操作 ☑️
  • 实现本地 git push 后 jenkins 自动构建部署服务 ☑️

此实践用于优化自己在实际工作中的工作流:

  1. 在本地开发 project
  2. git push project 到 git 服务器
  3. 登录云服务器 git pull project
  4. pm2 restart project 或者 node app.js

简化流程后:

  1. 本地开发 project
  2. git push
  3. 云服务器自动构建部署

本实践将结合 docker 技术来实现云服务器对各种环境的切换与部署。

基本原理:

webhook 即为一个 url。 配合 jenkins, 你的 git 服务器会在有新提交的时候请求这个 url, 而这个 url 背后对应着 jenkins 内的构建任务, 如此便实现了自动化构建。

在本例中使用 docker 主要是为了确立运行环境的独立性, 这里主要是为了便于安装 jenkins 。 当然你也可以直接 yum install jenkins 把他安装在云服务器上。

没有使用 Jenkinsfile 或 blue ocean 来部署的原因是对开启 webhook 不太友好「或许说是流程没有这样简单顺畅」。

docker 及 jenkins 安装

我的服务器是 centos7.4, ssh 连接服务器后用命令行安装 docker

yum install docker -y

service docker start

Jenkins 是一个用 Java 写的开源的持续集成软件。

为了避免安装各种各样的 Java 依赖, 我们直接安装 Jenkins 镜像, 并映射在云服务器的 8080 端口

我们依据 来安装。 我安装的是集成 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 triggerpost build task

图片描述
图片描述

Jenkins 部署 project

首先在你的 project 内新建 Dockerfile 文件, 内容如下:

# 拉取一个基本 node 运行环境的镜像,作为基础镜像FROM node:7-alpineRUN mkdir -p /appCOPY . /appWORKDIR /appRUN npm installEXPOSE 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://itlxo.baihongyu.com/

你可能感兴趣的文章
阅读《Android 从入门到精通》(24)——切换图片
查看>>
SimpleDateFormat线程不安全及解决的方法
查看>>
Unity---------Mesh理解
查看>>
hdu 1728 逃离迷宫 bfs记转向
查看>>
一分钟学会 ConstraintLayout 之从属性角度理解布局
查看>>
线程 Timer TimerTask 计时器 定时任务 MD
查看>>
[js高手之路]原型式继承与寄生式继承
查看>>
MBR分区操作-增加、扩展、删除
查看>>
php如何互换一个数组的首尾元素 中间不变 首尾互换
查看>>
C#最简单的登录Web服务
查看>>
[Entity Framework]
查看>>
【类】C#计算器类(SamWang)
查看>>
Kinect 开发小记:穿越艾泽拉斯,调戏红龙女王
查看>>
Leetcode: Construct Binary Tree from Inorder and Postorder Traversal
查看>>
ZeroMQ接口函数之 :zmq_getsockopt – 获取ZMQ socket的属性
查看>>
ThreadPoolExecutor使用介绍
查看>>
用C++/CLI搭建C++和C#之间的桥梁(四)—— 网络资源
查看>>
纳米技术的起源与发展
查看>>
launchpad, jira, github
查看>>
JavaWeb学习笔记——XML和SAX解析区别
查看>>