基于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. Windows10 Ubuntu bash 配置 LAMP+JDK+Tomcat

    Windows10的Bash省去了装ubuntu虚拟机的麻烦,而且可以直接用Windows下的浏览器去访问了,Exciting有没有,再也不用去忍受日常崩溃的chromium和慢慢的firefox了. ...

  2. GitHub学习笔记:本地操作

    安装过程略,假设你已经注册好了Github, 已经有了一个准备好的程序.我们的一切工作都是基于Git Shell,与GUI客户端无关. 在使用前你先要配置好config中的几个内容,主要是你自己的个人 ...

  3. CentOS7搭建LAMP实战

    环境配置从官网下载稳定的源码包解压预编译编译编译安装启动服务 环境配置 # yum install -y vim wget links //安装一下基本工具# systemctl stop firew ...

  4. Python 处理时间的模块

    1.由日期格式转化为字符串格式的函数为: datetime.datetime.strftime().date() 2.由字符串格式转化为日期格式的函数为: datetime.datetime.strp ...

  5. 使用input file上传文件中onChange事件只触发一次问题

    每次上传文件的时候,都会将当前的文件路径保存至$event.target.value中,当第二次选择文件时,由于两次$event.target.value相同,所以不会触发change事件. 解决方案 ...

  6. C++相关:部分标准库特殊设施

    C++ tuple(元组) tuple是C++11新标准里的类型.它是一个类似pair类型的模板.pair类型是每个成员变量各自可以是任意类型,但是只能有俩个成员,而tuple与pair不同的是它可以 ...

  7. .net 工程中引用出现感叹号

    在工程中引用出现感叹号,有两个原因 原因1:  这是由于之前引用的Dll文件不见了. 解决方案: 右键有感叹号的项,然后选择 “属性” 里边有一个路径属性 这个路径就是之前这个Dll文件的路径,现在这 ...

  8. 关于springboot的定时器配置

    关于springboot的定时器: 比较重要的两个注解: @EnableScheduling:标注启动定时任务. @Scheduled(fixedRate = 1000 * 30)  定义某个定时任务 ...

  9. MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ...

  10. nodejs模块xml2js解析xml的坑

    在一个项目中,用到nodejs模块xml2js解析xml,xml的数据如下: <xml> <MsgId>6197906553041859764</MsgId> &l ...