DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台
一.什么是CI
持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
二.CI工具
持续集成工具:jenkins
构建工具:maven
版本控制库:git
镜像仓库:harbor
三.CI流程

工作流程:
1. 开发人员提交代码到Git版本仓库;
2. Jenkins人工/定时触发项目构建;
3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
4. Jenkins在Docker主机创建容器并发布。
环境规划如下:
操作系统:centos7.6

四.部署Git代码版本仓库
1. 安装git仓库
# yum install git -y
2. 创建Git用户并设置密码
# useradd git
# passwd git
3. 创建仓库
# su - git
# mkdir tomcat-java-demo.git
# cd tomcat-java-demo.git
# git --bare init
4. 访问创建的这个仓库
# git clone git@192.168.1.165:/home/git/tomcat-java-demo.git
五.上传java项目代码(192.168.1.166)
# cd /home/
# git clone https://github.com/lizhenliang/tomcat-java-demo
# cd /home/tomcat-java-demo
修改私有镜像仓库地址:
# vim .git/config
url = git@192.168.1.165:/home/git/tomcat-java-demo.git
本地代码提交到git镜像仓库
# git add .
# git commit -m 'all'
# git push origin master
备注:初次提交可能报错

解决方案:
# git config --global user.email "you@example.com"
# git config --global user.name "Your Name"
六.部署Harbor镜像仓库(192.168.1.165)
参考:https://www.cnblogs.com/521football/p/10571304.html
七.配置JDK和Maven环境(192.168.1.166)
# tar -zxvf jdk-8u45-linux-x64.tar.gz
# tar -zxvf apache-maven-3.5.0-bin.tar.gz
# mv apache-maven-3.5.0 /usr/local/maven
# mv jdk1.8.0_45/ /usr/local/jdk
配置java环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
八.安装jenkins(192.168.1.166)
1. 安装jenkins
# tar -zxvf apache-tomcat-8.0.46.tar.gz
# mv apache-tomcat-8.0.46 /usr/local/jenkins_tomcat
# mv /home/jenkins.war /usr/local/jenkins_tomcat/webapps/ROOT.war
# cd /usr/local/jenkins_tomcat
# sh bin/startup.sh
# tail -f logs/catalina.out
日志中查看登录密码:cb2f3ddce17b494b847abf619a6c3ca5
登录jenkins: http://192.168.1.166:8080

可以跳过插件的安装…….
2. 创建用户

3. 安装插件
更新jenkins官方源http替换https
Jenkins---->插件管理--->Advanced --->Update Site

修改后submit---> Check now
安装插件
系统管理--->插件管理--->Available---> 选择pipeline, SCM to job插件进行安装
4. 配置git密钥(192.168.1.166)
# ssh-keygen
# ssh-copy-id git@192.168.1.165
添加全局凭证
Jenkins--->凭据--->系统--->全局凭据

上图key粘贴进去即可:
# cat ~/.ssh/id_rsa
九.安装docker(192.168.1.166)
参考:https://www.cnblogs.com/521football/p/10484390.html
十.构建基础镜像(192.168.1.166)
1. 构建tomcat基础镜像并上传harbor
创建Dockerfile-tomcat
# vim Dockerfile-tomcat
FROM centos:7
MAINTAINER xbl
ENV VERSION=8.5.39
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
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/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]
# docker build -t tomcat:v1 -f Dockerfile-tomcat .
启动镜像
docker run -d tomcat:v1
2. tomcat基础镜像推送到harbor
添加harbor可信任
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.1.165"]
}
# systemctl restart docker.service
harbor用户以及密码登录
# docker login 192.168.1.165 -u xubaolong -pxxx
# docker tag tomcat:v1 192.168.1.165/library/tomcat:v1
# docker push 192.168.1.165/library/tomcat:v1
十一.流水线发布测试(192.168.1.166)
创建流水线:



备注:此参数可以拓展:master(生产),dev(开发),test(测试)

Pipeline工作流程:
1. 从git仓库中拉取代码
2. maven构建项目及打包
3. 项目打包并推送镜像到仓库
- 下载tomcat基础镜像
- 增加构建后的war包到容器内
- Docke构建并推送业务镜像到harbor仓库
4. 部署到docker主机
- 删除老业务镜像
- 拉取业务镜像
- 启动Docker镜像
Pipeline脚本如下:
node { // 指定Slave标签
// 拉取代码
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches:
[[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions:
[], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'da6ba478-0899-4dcb-9a8f-0ec24dcd9022',
url: 'git@192.168.1.165:/home/git/tomcat-java-demo.git']]])
}
// 代码编译
stage('Maven Build') {
sh '''
export JAVA_HOME=/usr/local/jdk
/usr/local/maven/bin/mvn clean package
-Dmaven.test.skip=true
'''
}
// 项目打包到镜像并推送到镜像仓库
stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.1.165/project/tomcat-java-demo:${branch}
cat > Dockerfile << EOF
FROM 192.168.1.165/library/tomcat:v1
MAINTAINER xbl
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war
/usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login 192.168.1.165 -u xubaolong -p xxx
docker push $REPOSITORY
'''
}
// 部署到Docker主机
stage('Deploy to Docker') {
sh '''
REPOSITORY=192.168.1.165/project/tomcat-java-demo:${branch}
docker rm -f tomcat-java-demo |true
# docker image rm $REPOSITORY |true
docker pull $REPOSITORY
docker container run -d --name
tomcat-java-demo -p 88:8080 $REPOSITORY
'''
}
}
通过浏览器来访问tomcat-java-demo项目:http://192.168.1.166:88/

备注:由于tomcat,jdk,maven二进制包安装,有需要的小伙伴可自行下载
链接:https://pan.baidu.com/s/1XKWEVy-nPErNBQDCSRd-5w 密码:h8q4
DevOps实践之一:基于Docker构建企业Jenkins CI平台的更多相关文章
- 基于 Docker 构建企业 Jenkins CI平台
持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous Deployment,CD):部 ...
- 基于Docker构建企业Jenkins CI平台
- 使用Docker构建企业Jenkins CI平台
在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...
- 视频私有云实战:基于Docker构建点播私有云平台
私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...
- 基于Kubernetes构建企业Jenkins master/slave CI/CD平台
搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...
- 基于docker构建flink大数据处理平台
https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...
- 基于docker构建jenkins和svn服务(转)
码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...
- (转)基于OpenStack构建企业私有云(1)实验环境准备
原文:https://www.unixhot.com/article/407 https://www.cnblogs.com/kevingrace/p/5707003.html-----完整部署Cen ...
- Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇. 在之前的文章里面介绍了如何基于docker ...
随机推荐
- SpringBoot Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.
使用SpringBoot写HelloWorld,当配置好启动类后,再创建新的controller或其它类,启动项目后访问对应的映射名,页面显示: Whitelabel Error Page This ...
- JS——函数
一.函数的种类 1.无参函数 function showName() { alert("我是无参函数"); } 2.有参函数 在函数中的参数为"形式参数" 形式 ...
- Runc 简介
RunC 是什么? RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,并且这一件事要做好.我们可以认为它就是个命令行小工具,可以不用通过 docker 引擎,直接运行容器.事实上,r ...
- Java中判断是否为空的方法
1.判断字符串或者对象是否为空 首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.ut ...
- Spring Cloud Config 分布式配置中心使用教程
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- PAT1120: Friend Numbers
1120. Friend Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Two in ...
- spring中jedis对redis的事务使用注意总结
spring的@Transactional不支持redis的事务,并且redis的事务和其它关系型数据库的事务概念不是太一样,redis事务不支持回滚,并且一条命令出错后,后面的命令还会执行. 所以不 ...
- Web前端原生JavaScript浅谈轮播图
1.一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住 ...
- Scrapy爬虫框架第八讲【项目实战篇:知乎用户信息抓取】--本文参考静觅博主所写
思路分析: (1)选定起始人(即选择关注数和粉丝数较多的人--大V) (2)获取该大V的个人信息 (3)获取关注列表用户信息 (4)获取粉丝列表用户信息 (5)重复(2)(3)(4)步实现全知乎用户爬 ...
- 今天读一读七天学会NodeJS
七天学会NODEJS NodeJS基础 小结 本章介绍了有关NodeJS的基本概念和使用方法,总结起来有以下知识点: NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是 ...