(一)jenkins+git+docker
目录
一、发布流程设计
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、工作流程
- 开发人员提交代码到Git版本仓库;
- Jenkins人工/定时触发项目构建;
- Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
- 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的更多相关文章
- Jenkins+Git+Docker+K8s部署
准备工作 Jenkins已安装 Docker和K8s部署运行成功 代码管理工具使用Git 最近公司项目使用Jenkins+Git+Docker+K8s进行持续化构建部署,这里笔者整理了一下构建部署的相 ...
- jenkins+git+docker实验环境的搭建
持续集成(c/i)的实验环境 git/harbor服务器 ip 192.168.200.132 docker服务器 ip 192.168.200.149 Jenkins服务器 ...
- Jenkins 基于 Docker git JAVA CI/CD
准备两台机器 192.168.31.200 centos7 docker harbor git 192.168.31.201 centos7 docker jenkins maven git Ha ...
- Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)
前言 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD). 本文基于Jenkins+Docker+G ...
- DevOps实战(Docker+Jenkins+Git)
基于Docker+Jenkins+Git的CI/CD实战 与上一篇随笔:基于 Jenkins+Docker+Git 的CI流程初探 有所不同,该内容更偏向于实际业务的基础需求. 有几点需要注意: 该实 ...
- jenkins和docker 使用docker作为slave
使用docker作为jenkins slave. 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd 参 ...
- Jenkins集成Docker镜像实现自动发布
1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...
- 在windows下使用jenkins部署docker容器
在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken
项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...
随机推荐
- muduo源码解析11-logger类
logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...
- 4gl游标cursor
游標有多種寫法,一種是報表里常見的 這種寫法呢,先定義一個接受sql語句的變量l_sql,而接受到的語句實際上只是一連串的字符串,還包含了4gl裡面的一些變量.寫好的l_sql裡面之所以有多個分段的雙 ...
- 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- .net core 3.0 web api 重点设置,主要为了解决axios post不到参数问题
这两天研究.net core 3.0升级,前端vue+axios 后端web api.测试过程中发现post的时候,由于提交的是json对象,后端web api获取不到数据. 今天贴了下解决过程.主要 ...
- 每日JS逆向练习之斗鱼登录密码加密,今天你练了吗?
一切的基本功都是为后期调试滑块验证码准备的. 有兴趣的关注一下知识图谱与大数据公众号,当然不关注也无所谓.今天来看看斗鱼登录密码加密,正所谓熟能生巧,这种简单一点的基本3-5分钟就要能抠出来,有兴趣得 ...
- 屏幕适配 部分知识点总结,CSDN小冰原创
/** * 作者:David Zheng on 2015/11/7 15:38 * * 网站:http://www.93sec.cc * * 微博:http://weibo.com/mcxiaob ...
- Android开发之AlertDialog警告提示框删除与取消 详解代码
package cc.jiusansec.www; import android.app.Activity; import android.app.AlertDialog; import androi ...
- 数据库系统第六章【关系数据理论】(B站视频)
目录 数据库系统第六章[关系数据理论](B站视频) 一.前言 二.规范化 函数依赖 三种分类 如何确定函数依赖? 平凡函数依赖vs非平凡函数依赖 完全函数依赖vs部分函数依赖 传递函数依赖 码 超码 ...
- 软件开发流变史:从瀑布开发到敏捷开发再到DevOps
作为在20世纪70年代.80年代盛极一时的软件开发模型,瀑布模型通过制定计划.需求分析.软件设计.程序编写.软件测试.运行维护等6个流程将整个软件生命周期衔接起来.这6个流程有着严格的先后次序之分,只 ...
- Redis学习2:Redis的数据类型和常用操作
1.常用命令 命令 说明 返回值 时间复杂度 keys */[pattern] 遍历所有符合条件的key,一般不在生产环境使用 所有key O(n) dbsize 计算key的总数 n O(1) ex ...