资讯专栏INFORMATION COLUMN

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

Charlie_Jade / 3654人阅读

摘要:自动部署基础实践熟悉的基本操作实现本地后自动构建部署服务此实践用于优化自己在实际工作中的工作流在本地开发到服务器登录云服务器或者简化流程后本地开发云服务器自动构建部署本实践将结合技术来实现云服务器对各种环境的切换与部署。

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 。 当然你也可以直接 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 端口

我们依据 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 triggerpost build task

Jenkins 部署 project

首先在你的 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 等等。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27249.html

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(二、构建部署篇)

    摘要:如果还没有搭建好可以使用的,请先移步到这篇文章进行搭建使用自动部署服务一搭建篇目标通过实现推送代码后自动部署基于的服务准备工作获取示例项目或者直接复制以下文件内容获取示例项目项目文件页面文件镜像文件部署文件部署脚本文件页面文件项目很简单, 如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建 使用 Jenkins 自动部署 Docker 服务(一、Je...

    denson 评论0 收藏0
  • Docker 入门(三):持续集成、持续部署

    摘要:为了看起来清晰,我写了一个文件,将这个文件和之前的放在同一个目录中,可以用以下命令快速启动,启动之后新构建的镜像和容器都名为。 showImg(https://segmentfault.com/img/remote/1460000014924499?w=883&h=515); 在软件开发过程中,如果我们每一次提交的代码都能够进行一次完整的编译、测试、打包、发布,就能及早发现问题、及早修...

    newtrek 评论0 收藏0
  • Docker+Jenkins+Nodejs+Git+Webhook自动部署

    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...

    tuomao 评论0 收藏0
  • 手把手教你用JenkinsDocker的方式自动发布dotnet core程序

    摘要:部分首先我们要有个咯下载链接我们安装官网教程安装好安装教程略嗯不是说好手把手么你妹的好好好我们还是来手把手教程好了首先安装添加安装源之后直接就好下面是的安装命令其他系统自己玩一下就好下载启动下载链接在这里面找最新的下载我当前 Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安...

    stackvoid 评论0 收藏0
  • 使用Docker+Jenkins自动构建部署

    摘要:使用自动构建部署环境阿里云,宿主机服务器安装,在安全规则中确认端口开启。完毕后,根据提示设置登陆账户。至此,完成自动化的构建和部署。当你推送代码后就会实现自动构建,部署。容器出错的是镜像构建和镜像运行,以及容器间通信的问题。 使用Docker+Jenkins自动构建部署 环境 阿里云ESC,宿主机服务器安装Docker,在安全规则中确认8080端口开启。 客户端mac 运行jenk...

    qc1iu 评论0 收藏0

发表评论

0条评论

Charlie_Jade

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<