基于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. HTML学习笔记:2.基础语法

    HTML基本结构 HTML标签 HTML元素 HTML属性 注释 ①基本结构 <html> html:指明是个html文件 <head> <title>标题< ...

  2. quick-cocos2d-x与 cocos2d-x的关系

    quick-cocos2d-x(后文简称 quick)与 cocos2d-x 的关系,用一句话概括:quick 是 cocos2d-x 针对 Lua 的豪华套装威力加强版. 那 quick 与 coc ...

  3. python之文件操作(基础)

    文件操作作为python基础中的重点,必须要掌握. 1.默认我们在本地电脑E盘新建wp.txt文件进行测试,文件内容如下设置. 2.进行代码编写: f=open("E://wp.txt&qu ...

  4. C/C++静态代码安全检查工具

    静态代码安全检查工具是一种能够帮助程序员自动检测出源程序中是否存在安全缺陷的软件.它通过逐行分析程序的源代码,发现软件中潜在的安全漏洞.本文针对 C/C++语言程序设计中容易存在的多种安全问题,分别分 ...

  5. js流程语句

    一.跳转语句1.break; 终止整个循环,不再进行判断2.continue; 终止本次循环,接着去判断是否执行下次循环 二.选择(判断)结构1.if 如果               if(条件1) ...

  6. CSS弹性盒子的基本用法

    .container { width: 302px; height: 302px; border: 1px solid; display: flex } .item { width: 100px; h ...

  7. 管理和安装 chart - 每天5分钟玩转 Docker 容器技术(168)

    安装 chart 当我们觉得准备就绪,就可以安装 chart,Helm 支持四种安装方法: 安装仓库中的 chart,例如:helm install stable/nginx 通过 tar 包安装,例 ...

  8. Spring 的IOC和AOP总结

    Spring 的IOC和AOP IOC 1.IOC 许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我 ...

  9. PAT1116: Come on! Let's C

    1116. Come on! Let's C (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue &quo ...

  10. Java bean和json互转时,屏蔽某个属性

    有的时候我们把java bean 转换成json的时候,希望屏蔽掉某个属性,这时可以在java bean的属性上加上@JsonIgnore注解,在com.fasterxml.jackson.annot ...