资讯专栏INFORMATION COLUMN

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

denson / 2595人阅读

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

如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建

使用 Jenkins 自动部署 Docker 服务(一、Jenkins 搭建篇) 目标
通过 Jenkins 实现推送代码后自动部署基于 Docker 的服务
准备工作
获取示例项目或者直接复制以下文件内容
# 获取示例项目
git clone https://github.com/kwkwc/jenkins_demo.git

# 项目文件
├── index.html              # 页面文件
├── Dockerfile              # 镜像文件
├── docker-compose.src.yml  # Docker 部署文件
├── deploy_jenkins.sh       # 部署脚本
├── Jenkinsfile             # Jenkins Pipeline 文件
页面文件
项目很简单,就是一个静态网页
index.html


    
        
        Jenkins demo
    
    
        

Jenkins demo

镜像文件
镜像以 nginx 为基础镜像,然后复制 index.html 进容器
Dockerfile
FROM nginx:1.15.2
ENV REFRESHED_AT 2018-08-09

COPY ./index.html /usr/share/nginx/html/index.html

RUN ln -sf /dev/stdout /var/log/nginx/access.log 
    && ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80

STOPSIGNAL SIGTERM

CMD ["nginx", "-g", "daemon off;"]
Docker 部署文件
设置了 8081 端口和部署失败重试
docker-compose.src.yml
version: "3.4"
services:
  jenkins_demo:
    image: IMAGE_LATEST
    deploy:
      restart_policy:
        condition: on-failure
    expose:
      - "80"
    ports:
      - 8081:80
部署脚本 deploy_jenkins.sh
#!/bin/bash

# 容器名称
CONTAINER="jenkins_demo"
# 镜像名称(以日期时间为镜像标签,防止重复)
IMAGE=$CONTAINER":"$(date -d "today" +"%Y%m%d_%H%M%S")

# 删除滚动更新残留的容器
docker rm `docker ps -a | grep -w $CONTAINER"_"$CONTAINER | awk "{print $1}"`
# 强制删除滚动更新残留的镜像
docker rmi --force `docker images | grep -w $CONTAINER | awk "{print $3}"`

# 创建新镜像
docker build -t $IMAGE . && 

# 删除 docker-compose.jenkins.yml 文件,防止使用相同镜像
rm -rf docker-compose.jenkins.yml && 

# 复制 docker-compose.src.yml 文件,防止污染原文件
cp docker-compose.src.yml docker-compose.jenkins.yml && 

# 替换镜像名标志位为最新镜像
sed -i s%IMAGE_LATEST%$IMAGE%g docker-compose.jenkins.yml && 

# 使用 docker stack 启动服务
docker stack deploy -c docker-compose.jenkins.yml $CONTAINER
实现无工具自动部署
我们暂时忘记 Jenkins,先看看无工具自动部署是怎么实现的
初始化 Docker Swarm 集群网络
由于我们使用了 Docker Stack,他可用于实现滚动更新,分布式集群,但依赖于  Docker Swarm 集群网络,直接使用会报错,所以需要先初始化 Docker Swarm 集群网络
# 初始化 Docker Swarm 集群网络
docker swarm init
运行部署脚本
./deploy_jenkins.sh
查看镜像
docker images

查看容器
docker ps

浏览器打开
http://127.0.0.1:8081
成功自动部署

更改内容
尝试修改 index.html 内容再运行部署脚本 ./deploy_jenkins.sh
效果

实现 Jenkins 自动部署
Jenkins 的自动部署本来比较复杂,但是后来有了 Pipeline,一切都简单了,Pipeline 是 Jenkins 的一个插件,初始化 Jenkins 的时候会推荐安装,如果没有请自行安装
Jenkins Pipeline 文件
项目中如果有 Jenkinsfile 文件, Jenkins 检测到就会自动按 Jenkinsfile 写的流程运行命令,例如这个 Jenkinsfile 文件里面写的就是自动帮我们运行刚才的部署脚本
Jenkinsfile
pipeline {
  agent none
  stages {
    stage("Deploy") {
      agent any
      steps {
        echo "Deploying"
        sh "./deploy_jenkins.sh"
      }
    }
  }
}
新建任务
输入任务名称,选择流水线

填写信息
只需要填写流水线里面的信息
"定义" 选择 "Pipeline script from SCM"
"SCM" 选择 "Git"
"Repository URL" 填写 Git 仓库地址
选好 Git 分支
如果是私密仓库,在 “Credentials” 那一栏添加账号密码然后选择账号就行

查看任务
保存后回到主页就可以看到我们新建的任务,可以看到状态、运行情况等信息

手动构建
点击一下界面的立即构建按钮就可以开始构建了


自动构建(定时查询)
设置构建触发器,例如每 30 分钟查询一次是否有更新,有则自动构建

自动构建(主动通知)
主动通知需要安装插件,这里以 Gitea 为例子,Gitea 使用的是 Gogs 的插件
"系统管理" --> "插件管理" --> "可选插件" 搜索 Gogs,勾选直接安装,安装成功后在项目配置里面会多出一个 "Gogs Webhook" 选项,不需要配置任何东西,安装了就行


设置 Gitea 钩子
在 Gitea 的 Webhooks 中填写下面的 URL 就可以实现推送代码后主动通知 Jenkins 自动部署,其他基于 Git 的仓库设置一样
http://127.0.0.1:8080/gogs-webhook/?job=jenkins_demo

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

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

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(一、Jenkins 搭建

    摘要:直接使用官方的镜像一般会有两个问题导致不能正常自动部署基于的服务。 直接使用 Jenkins 官方的镜像一般会有两个问题导致不能正常自动部署基于 Docker 的服务。 存在的问题 官方的镜像默认不是使用 root 账号,虽然 Jenkins 可以正常启动,但是因为没有权限导致不能向宿主机写文件 Jenkins 基于 Docker 搭建,虽然 Jenkins 同样可以正常启动,但不能...

    Clect 评论0 收藏0
  • 一套基础自动部署搭建过程

    摘要:问题背景公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列管理以及自动化部署等工具所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种问题,但最终把基本工具全部搭建成功,耶,下面带大家一起看下此次搭建过程。 问题背景 公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列code管理以及自动化部署等工具....所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种...

    mzlogin 评论0 收藏0
  • 从0开始搭建自动部署环境(续)

    摘要:从开始搭建自动部署环境续前言上一篇从开始搭建自动部署环境虽然环境搭建起来了,但是配置少了一部分步骤。创建本地仓库参考新建项目项目是我写的一个用来测试环境的项目,代码托管在上。 从0开始搭建自动部署环境(续) 前言 上一篇从0开始搭建自动部署环境虽然环境搭建起来了,但是配置少了一部分步骤。本来应该写到上一篇中,但是这样做篇幅过长了。另外,此篇会使用自动部署一个同步在Github上的Spr...

    lily_wang 评论0 收藏0
  • 从0开始搭建自动部署环境(续)

    摘要:从开始搭建自动部署环境续前言上一篇从开始搭建自动部署环境虽然环境搭建起来了,但是配置少了一部分步骤。创建本地仓库参考新建项目项目是我写的一个用来测试环境的项目,代码托管在上。 从0开始搭建自动部署环境(续) 前言 上一篇从0开始搭建自动部署环境虽然环境搭建起来了,但是配置少了一部分步骤。本来应该写到上一篇中,但是这样做篇幅过长了。另外,此篇会使用自动部署一个同步在Github上的Spr...

    shuibo 评论0 收藏0
  • Jenkins + Docker 简单部署 node.js 项目

    摘要:目前官方已开始推荐使用替代之前的做为基础镜像环境。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。 有了前几篇的基础后,我们现在已经能 docker 篇: 构建 docker 镜像 上传私有仓库 拉取私有镜像 启动容器 jenkins 篇: 配置 pipeline 触发 pipeline 接下来就可以结合两者,用 jenkins + docker...

    princekin 评论0 收藏0

发表评论

0条评论

denson

|高级讲师

TA的文章

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