目录

一、发布流程设计

1、工作流程

2、环境规划如下

二、部署Git仓库

1、创建Git用户并设置密码

2、创建仓库

3、免密访问

4、在jenkins那台机上做ssh认证

三、准备Jenkins环境

1、       安装Java环境

2、安装jenkins

四、安装Docker

1、官网安装(比较慢

2、清华源安装docker-ce

五、部署私有镜像仓库

1、registry私有镜像仓库

2、测试registry可用性

六、构建Tomcat基础镜像

1、安装JDK

2、Tomcat基础镜像Dockerfile

3、构建镜像并上传到registry

4、查看镜像仓库的images

5、检查镜像能否访问

七、Jenkins配置全局工具配置

1、安装Git

2、安装maven

八、Jenkins安装必要插件

1、Jenkins插件

2、 配置SSH插件

九、上传JAVA项目代码到Git仓库

1、从Github拉取JAVA系统solo:

十、Jenkins创建项目并发布测试

1、主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目

2、“General”动态获取Git仓库tag,与用户交互选择Tag发布

3、指定项目Git仓库地址

4、设置maven构建命令选项

5、在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器

6、blog-yehui项目已配置完成,开始构建:

在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。

一、发布流程设计

1、工作流程

  1. 开发人员提交代码到Git版本仓库;
  2. Jenkins人工/定时触发项目构建;
  3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
  4. Jenkins在Docker主机创建容器并发布。

2、环境规划如下

角色

IP

Jenkins/Docker

192.168.22.132

Docker

192.168.22.133

Git/Registry

192.168.22.134

操作系统:CentOS7.4

二、部署Git仓库

yum install git -y

1、创建Git用户并设置密码

useradd git

passwd git

2、创建仓库

mkdir -p /home/git/yehui.git

cd /home/git

git --bare init yehui.git

chown -R git:git yehui.git

3、免密访问

cd /home/git

mkdir -p .ssh

chmod 700 .ssh

touch .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

chown -R git:git .ssh

4、在jenkins那台机上做ssh认证

ssh-keygen -t rsa -C test.name@email

ssh git@192.168.22.134 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

5、访问创建的这个仓库

git clone git@192.168.22.134:/home/git/yehui.git

三、准备Jenkins环境

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨平台的,大多数主流的平台都支持,而且安装很简单,我们这里以部署war包方式安装它。

官网下载地址:https://jenkins.io/download/

如图点击下载最后一个Generic Java package(war):

Docker启动jenkins

  docker run \
  --rm \
  -u root \
  -p 8080:8080 \
  -v /data/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$HOME":/home \
  jenkinsci/blueocean

docker ps         查看容器ID

docker exec -it 容器id bash

cat /var/jenkins_home/secrets/initialAdminPassword             查看密码,如果忘了的话;

1、 安装Java环境

tar zxf jdk-8u45-linux-x64.tar.gz

mv jdk-8u45-linux-x64
/usr/local/jdk1.8

vi /etc/profile

JAVA_HOME=/usr/local/jdk1.8

PATH=$PATH:$JAVA_HOME

export JAVA_HOME PATH

source /etc/profile

2、安装jenkins

在192.168.22.132主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:**

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz

tar zxf apache-tomcat-8.5.32.tar.gz

mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins

rm
/usr/local/tomcat-jenkins/webapps/* -rf

unzip jenkins.war -d
/usr/local/tomcat-jenkins/webapps/ROOT

cd /usr/local/tomcat-jenkins/bin/

./startup.sh

tail ../logs/catalina.out -f

... Jenkins initial setup is
required. An admin user has been created and a password generated. Please use
the following password to proceed to installation:

a5f1f7c167fd4b8ab62f9497d32d97db

This may also be found at:
/root/.jenkins/secrets/initialAdminPassword ...

部署成功,访问Jenkins:http://ip:8080

第一步:输入上面日志输出的密码:a5f1f7c167fd4b8ab62f9497d32d97db,或者从本机/root/.jenkins/secrets/initialAdminPassword文件获取,点击继续

第二步:点击“选择插件来安装”

第三步:保持默认,点击继续

第四步:创建管理员用户,保存并完成

第五步:设置Jenkins访问地址,保持默认,点击保存完成

安装完成,开始使用Jenkins:

四、安装Docker

在192.168.22.132/192.168.22.133/192.168.22.134主机安装Docker,如下:

1、官网安装(比较慢)

1、安装依赖包

yum install -y yum-utils
device-mapper-persistent-data lvm2

2、添加Docker软件包源:

yum-config-manager \ --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

3、安装Docker CE

yum install docker-ce -y

4、配置加速器

curl -sSL
https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://bc437cce.m.daocloud.io

5、启动并开机启动

systemctl start docker

systemctl enable docker

2、清华源安装docker-ce

1、如果你之前安装过 docker,请先删掉

sudo yum remove docker docker-common
docker-selinux docker-engine

2、安装一些依赖

sudo yum install -y yum-utils
device-mapper-persistent-data lvm2

wget -O /etc/yum.repos.d/docker-ce.repo
https://download.docker.com/linux/centos/docker-ce.repo

3、把软件仓库地址替换为 TUNA:

sudo sed -i
's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+'
/etc/yum.repos.d/docker-ce.repo

4、最后安装:

sudo yum makecache fast

sudo yum install docker-ce

5、配置加速器

curl -sSL
https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://bc437cce.m.daocloud.io

6、启动并开机启动

systemctl start docker

systemctl enable docker

五、部署私有镜像仓库

1、registry私有镜像仓库

Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。

在192.168.22.134部署:

docker run -d -v
/opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry
registry

2、测试registry可用性

由于Docker CLI默认以HTTPS访问,而部署的registry并未提供HTTPS,因此,需要在pull镜像的Docker主机(192.168.22.132,192.168.22.133)添加HTTP可信任:记住别替换掉"registry-mirrors";

vi /etc/docker/daemon.json

{"insecure-registries":["192.168.22.134:5000"]}

service docker restart

六、构建Tomcat基础镜像

JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用,在192.168. 22.133 docker主机操作;

1、安装JDK

tar zxvf jdk-8u45-linux-x64.tar.gz

mv jdk-8u45-linux-x64
/usr/local/jdk1.8

vi /etc/profile

JAVA_HOME=/usr/local/jdk1.8

PATH=$PATH:$JAVA_HOME

export JAVA_HOME PATH

source /etc/profile

2、Tomcat基础镜像Dockerfile

vim Dockerfile FROM centos:7

MAINTAINER www.aliangedu.com

ENV VERSION=8.5.32

ENV JAVA_HOME /usr/local/jdk

RUN yum install wget -y

RUN wget
http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
&& \

tar zxf
apache-tomcat-${VERSION}.tar.gz && \

mv apache-tomcat-${VERSION}
/usr/local/tomcat && \

rm -rf
apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \

mkdir
/usr/local/tomcat/webapps/ROOT

EXPOSE 8080

CMD
["/usr/local/tomcat/bin/catalina.sh", "run"]

3、构建镜像并上传到registry

docker build -t 192.168.22.134:5000/tomcat-85
-f Dockerfile .

docker push 192.168.22.134:5000/tomcat-85

4、查看镜像仓库的images

curl
-XGET http://192.168.22.134:5000/v2/_catalog

获取某个镜像的标签列表:

curl
-XGET http://192.168.22.134:5000/v2/tomcat-85/tags/list

5、检查镜像能否访问;

docker
container run -d --name ttomcat -p 8080:8080 -v
/usr/local/jdk1.8/:/usr/local/jdk 
192.168.22.134:5000/tomcat-85

返回404状态码是正确的,因为webapps目录下面的资源已被删除;

七、Jenkins配置全局工具配置

主页面 -> 系统管理 -> 全局工具配置

指定JDK、Maven路径,Git保持默认:

1、安装Git

yum install git -y

2、安装maven

wget
http://ftp.heanet.ie/mirrors/www.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz

tar xzf
apache-maven-*-bin.tar.gz -C /usr/local

cd /usr/local

ln -s apache-maven-*
maven

vi
/etc/profile.d/maven.sh

export M2_HOME=/usr/local/maven

export PATH=${M2_HOME}/bin:${PATH}

bash

mvn -version

八、Jenkins安装必要插件

1、Jenkins插件

主页面 -> 系统管理 ->管理插件:Git Parameter   SSH

插件说明:

  • SSH:用于SSH远程Docker主机执行Shell命令
  • Git Parameter:动态获取Git仓库Branch、Tag

2、 配置SSH插件

第一步:先创建一个用于连接Docker主机的凭据。

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

输入连接Docker主机的用户名和密码:

第二步:添加SSH远程主机

主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

九、上传JAVA项目代码到Git仓库

1、从Github拉取JAVA系统solo:

    git clone https://github.com/ZhaoUncle/solo.git

cp -r solo/* yehui

提交代码到Git仓库并创建tag:

cd yehui

touch src/main/webapp/a.html

git add .

git commit -m “a”

创建标签:

git tag 1.0.0

推送到Git服务器:

git push origin 1.0.0

十、Jenkins创建项目并发布测试

1、主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。

配置Git参数化构建:

2、“General”动态获取Git仓库tag,与用户交互选择Tag发布

3、指定项目Git仓库地址

注意:修改*/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

4、设置maven构建命令选项

clean package -Dmaven.test.skip=true

利用pom.xml文件构建项目。

5、在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器

上图中,在Jenkins主机执行的Shell命令如下:

REPOSITORY=192.168.22.134:5000/yehui:${Tag}

# 构建镜像

cat > Dockerfile << EOF

FROM 192.168.22.134:5000/tomcat-85:latest

RUN rm -rf /usr/local/tomcat/webapps/ROOT

COPY target/*.war /usr/local/tomcat/webapps/ROOT.war

CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

EOF

docker build -t $REPOSITORY .

# 上传镜像

docker push $REPOSITORY

上图中,SSH远程Docker主机执行的Shell命令如下:

REPOSITORY=192.168.22.134:5000/yehui:${Tag}

# 部署

docker rm -f blog-yehui |true

docker image rm $REPOSITORY |true

docker container run -d --name blog-yehui -v /usr/local/jdk1.8: /usr/local/java -p 88:8080 $REPOSITORY

注:容器名称blog-yehui,暴露宿主机端口88,即使用宿主机IP:88访问blog-yehui项目。

6、blog-yehui项目已配置完成,开始构建:

选择tag,开始构建:

点击左下角构建历史里,右击第一个查看控制台输出:

浏览器访问yehui项目:http://192.168.22.133:88

(一)jenkins+git+docker的更多相关文章

  1. Jenkins+Git+Docker+K8s部署

    准备工作 Jenkins已安装 Docker和K8s部署运行成功 代码管理工具使用Git 最近公司项目使用Jenkins+Git+Docker+K8s进行持续化构建部署,这里笔者整理了一下构建部署的相 ...

  2. jenkins+git+docker实验环境的搭建

    持续集成(c/i)的实验环境 git/harbor服务器    ip 192.168.200.132 docker服务器          ip 192.168.200.149 Jenkins服务器 ...

  3. Jenkins 基于 Docker git JAVA CI/CD

    准备两台机器 192.168.31.200 centos7  docker harbor git 192.168.31.201 centos7  docker jenkins maven git Ha ...

  4. Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)

    前言 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD). 本文基于Jenkins+Docker+G ...

  5. DevOps实战(Docker+Jenkins+Git)

    基于Docker+Jenkins+Git的CI/CD实战 与上一篇随笔:基于 Jenkins+Docker+Git 的CI流程初探 有所不同,该内容更偏向于实际业务的基础需求. 有几点需要注意: 该实 ...

  6. jenkins和docker 使用docker作为slave

    使用docker作为jenkins slave. 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd 参 ...

  7. Jenkins集成Docker镜像实现自动发布

    1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...

  8. 在windows下使用jenkins部署docker容器

    在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...

  9. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...

随机推荐

  1. os.path获取当前路径及父路径

    import os pwd = os.getcwd() print("当前目录: " + pwd) father_path_method1 = os.path.dirname(pw ...

  2. MySQL集群搭建方案(PXC)

    服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...

  3. Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...

  4. RVO+CA

    http://gamma.cs.unc.edu/RVO/ http://gamma.cs.unc.edu/CA/ https://arongranberg.com/astar/docs/writing ...

  5. openresty(nginx+lua)初识

    1.新增项目配置文件: vim /usr/example/example1.conf --将以下内容加入example1.conf server { listen 80; server_name _; ...

  6. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  7. 官网安装Python包太慢?教你三种下载安装方式-PiP、conda、轮子,教你三种Pytorch的下载安装方式,保证你再也不用出现Error

    上一期我们介绍了CUDA下载安装以及其总结,这一期教大家如何在Anaconda中使用CUDA来进行加速.神经网络依赖cuDNN的下载安装,以及下载和安装Pytorch-GPU安装包的三种方式(cond ...

  8. 微信小程序(1)

    微信小程序 什么是微信小程序? 微信小程序优点 跨平台 打开速度比h5快 不用下载 开发目录结构介绍 1. 小程序Pages目录说明 2. 工具文件夹 3. 全局文件 用法1 全局APP.json文件 ...

  9. ZT:通过Find命令找到你要找的东西

    https://os.51cto.com/art/202003/612049.htm find 命令有巨多的选项可以帮助你准确定位你在 Linux 系统上需要寻找的文件.这篇文章讨论了一系列非常有用的 ...

  10. leetcode刷题-59螺旋矩阵2

    题目 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 思路 与螺旋矩阵题完全一致 实现 class Solution: def generateM ...