基于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平台的更多相关文章

  1. 基于 Docker 构建企业 Jenkins CI平台

    持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous Deployment,CD):部 ...

  2. 基于Docker构建企业Jenkins CI平台

  3. 使用Docker构建企业Jenkins CI平台

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  4. 视频私有云实战:基于Docker构建点播私有云平台

    私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...

  5. 基于Kubernetes构建企业Jenkins master/slave CI/CD平台

    搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...

  6. 基于docker构建flink大数据处理平台

    https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...

  7. 基于docker构建jenkins和svn服务(转)

    码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...

  8. (转)基于OpenStack构建企业私有云(1)实验环境准备

    原文:https://www.unixhot.com/article/407 https://www.cnblogs.com/kevingrace/p/5707003.html-----完整部署Cen ...

  9. Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务

    本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇. 在之前的文章里面介绍了如何基于docker ...

随机推荐

  1. js对象属性值为对象形式取值方式

    console.log(rowData);//取带点的属性值 console.log(rowData['layoutPipegallery.pipegallerycode']);//取带点的属性值

  2. pycharm linux版快捷方式创建

    ****************************pycharm_linux安装and快捷方式创建******************1.下载好安装包之后解压:    tar -xfz 压缩包名 ...

  3. linux中普通的文件查看操作(cat、more、less、head、tail)

    cat:基本是最常用的查看文件内容的linux命令. more 也是用来查看一个文件的内容.当文件内容太多,一屏幕不能占下,而你用cat肯定是看不前面的内容的,那么使用more就可以解决这个问题了.当 ...

  4. redis两种持久化方法对比分析

    1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...

  5. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  6. sql server 阻塞查询

    在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后.就需要检查数据库是否有出现阻塞 当时数据库的生产环境中主表数据量超过2000w, ...

  7. AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码

    一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...

  8. React官方文档笔记之快速入门

    快速开始 JSFiddle 我们建议在 React 中使用 CommonJS 模块系统,比如 browserify 或 webpack. 要用 webpack 安装 React DOM 和构建你的包: ...

  9. 如何解决python升级后yum报错

    当我们yum命令的时候,会提示 "File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxEr ...

  10. 用secureCRT连接虚拟机中的Ubuntu系统,出现“远程主机拒绝连接”错误

    因为我的Ubuntu中未安装ssh服务,终端下运行命令: sudo apt-get install openssh-server 之后重启一下sshd服务: sudo service sshd res ...