设为首页 收藏本站
查看: 1509|回复: 0

[经验分享] docker与jenkins的自动化CI/CD流水线实战(git)

[复制链接]

尚未签到

发表于 2019-2-20 09:52:03 | 显示全部楼层 |阅读模式
docker与jenkins的自动化CI/CD流水线实战
  在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。

  高效的CI/CD环境可以获得:


  • · 及时发现问题
  • · 大幅度减少故障率
  • · 加快迭代速度
  • · 减少时间成本

一、发布流程设计

总结:开发===》提交代码到Git/Svn===>推送到Jenkins====>通过代码编译、构建镜像、推送===》Docker Registry(harbor)===>docker环境拉去仓库信息==》发布


  工作流程:


  • 开发人员提交代码到Git版本仓库;
  • Jenkins人工/定时触发项目构建;
  • Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
  • Jenkins在Docker主机创建容器并发布。
  环境规划如下:
角色                                        IP
Jenkins/Docker               192.168.1.24
Docker                            192.168.1.23
Git/Registry                       192.168.1.25


二、部署Git仓库
  1、登录192.168.1.25
[root@docker harbor]# yum install git -y
  2、创建Git用户并设置密码
[root@docker harbor]# useradd git
[root@docker harbor]# passwd git
  3、创建仓库
[git@docker ~]$ mkdir java-demo.git
初始化:
[git@docker ~]$ cd java-demo.git/
[git@docker java-demo.git]$ git --bare init
  4、登录jenkins 虚拟机-192.168.1.24
[root@docker ~]# git clone git@192.168.1.25:/home/git/java-demo.git
  5、拉去代码(试验):
[root@docker ~]# git clone https://github.com/lizhenliang/tomcat-java-demo.git
  6、更改git提交的地址

  7、再提交到git仓库
[root@docker tomcat-java-demo]# git add .
[root@docker tomcat-java-demo]# git commit -m 'java-demo'
运行以下2个命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
  [root@docker tomcat-java-demo]# git push origin master
origin:是名字--在.git/config配置文件中
master:是主分支
  8、再拉去代码:
[root@docker tomcat-java-demo]# cd ../java-demo/
[root@docker java-demo]# git pull

三、准备Jenkins环境
  官网下载地址:https://jenkins.io/download/
如图点击下载最后一个Generic Java package(war):

  免密拉取代码(从docker (192.168.1.23那台机,因为是docker那台机发布的) 免密ssh 登录到git那台机)
[root@docker ~]# ssh-keygen
  [root@docker ~]# ssh-copy-id git@192.168.1.25
  因为需要docker(192.168.1.23)发布,是获取192.168.1.25(harbor)上的镜像,需要在192.168.1.23上修改配置,才能拉取
[root@docker java-demo]# vi /etc/docker/daemon.json
  {"registry-mirrors": ["http://f1361db2.m.daocloud.io"],"insecure-registries":["192.168.1.25"]}
  重启docker
  验证:
[root@docker ~]# ssh git@192.168.1.25
  准备java环境
[root@docker tools]# tar xf jdk-8u65-linux-x64.gz -C /usr/local/
[root@docker local]# mv jdk1.8.0_65/ jdk1.8
[root@docker local]# vi /etc/profile --新增如下
JAVA_HOME=/usr/local/jdk1.8
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
  [root@docker local]# source /etc/profile
[root@docker local]# java -version
  jenkins部署:
[root@docker tools]# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
[root@docker tools]# tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/
[root@docker tools]# cd /usr/local/
[root@docker local]# mv apache-tomcat-8.5.32/ tomcat-jenkins
  删除网站根目录
[root@docker tomcat-jenkins]# cd webapps/
[root@docker webapps]# ls
docs  examples  host-manager  manager  ROOT
[root@docker webapps]# rm -rf *
  将jenkins解压到网站根目录,就是ROOT目录下
[root@docker webapps]# unzip /data/tools/jenkins.war -d ROOT
  启动:
[root@docker webapps]# sh ../bin/startup.sh
  访问:
http://192.168.1.24:8080/

  安装插件:

  将https更改为http

  更改完成后再重启tomcat
  安装插件:
Pipeline:

  SSH Slaves插件:

  安装Git插件:

  安装SCM API 插件
  安装Git Parameter 插件 --》为了构建时显示git 提交信息
  插件下载失败:
http://updates.jenkins-ci.org/download/plugins/ 这里下载
然后再上传插件
https://blog.csdn.net/KingBoyWorld/article/details/77923615

jenkins 安装docker slave节点
  master 只是调度,slave运行,这样matser压力就小很多
  1、安装jdk环境 ---192.168.1.23
  1.1 安装git
yum install git -y
  2、新建节点

  3、

  4、添加192.168.1.23 root账号

  5、添加java路径

  6、保存
7、保存就启动了:

  8、在192.168.1.23-docker上安装maven
[root@docker tools]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/
[root@docker local]# mv apache-maven-3.5.0/ maven-3.5.0

创建任务
  1、创建pipeline项目

  2、Branch 这个变量是在pipeline中定义的

  推荐使用git版本号信息:

  3、编辑pipeline
  只保留正在使用一个镜像

node ("192.168.1.23-docker") {   // 指定Slave标签
// 拉取代码
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches: [[name: '$Branch']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@192.168.1.25:/home/git/java-demo.git']]])
}
// 代码编译
stage('Maven Build') {
sh '''
export JAVA_HOME=/usr/local/jdk1.8
/usr/local/maven-3.5.0/bin/mvn clean package -Dmaven.test.skip=true
'''
}
// 项目打包到镜像并推送到镜像仓库
stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.1.25/java/java-demo:${Branch}
echo '
FROM 192.168.1.25/library/tomcat:v8.5.32
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
' > Dockerfile
docker build -t $REPOSITORY .
docker login -u jack -p 123Abc456 192.168.1.25
docker push $REPOSITORY
'''
}
// 部署到Docker主机
stage('Deploy to Docker') {
sh '''
REPOSITORY=192.168.1.25/java/java-demo:${Branch}
docker rm -f java-demo |true
docker image rm $(docker images| grep "192.168.1.25/java/java-demo"| grep 'none'|awk '{print $3}')|true
docker image rm $REPOSITORY |true
docker login -u jack -p 123Abc456 192.168.1.25
docker run -d --name java-demo -p 88:8080 $REPOSITORY
new_image=`docker images |grep "192.168.1.25/java/java-demo"| head -n 1|awk '{print $3}'`
for i in `docker images|grep "192.168.1.25/java/java-demo"|awk '{print $3}'`;do [ "$i" != "${new_image}" ] && docker image rm -f $i;done|true
'''
}
}
  验证:
1、构建:


  以下是git 版本号信息:

  2、如果有报错就解决
  3、访问:http://192.168.1.23:88/
  pipeline 总结:
1、无论发布多少的版本,在docker的主机中只有一个镜像,与其对应的一个容器。
2、在harbor中有很多个版本

harbor删除镜像
  参考文档:https://blog.csdn.net/kong2030/article/details/81331142?tdsourcetag=s_pcqq_aiomsg
  Harbor私有仓库运行一段时间后,仓库中存有大量镜像,会占用太多的存储空间。直接通过Harbor界面删除相关镜像,并不会自动删除存储中的文件和镜像。需要停止Harbor服务,执行垃圾回收命令,进行存储空间清理和回收。
  1、首先,删除Harbor的UI中的存储库。这是软删除。您可以删除整个存储库或仅删除它的标签。软删除后,Harbour中不再管理存储库,但是存储库的文件仍然保留在Harbour的存储中。
  2、接下来,使用注册表的垃圾回收(GC)删除存储库的实际文件。在执行GC之前,确保没有人推送图像或Harbour根本没有运行。如果有人在GC运行时推送镜像,则存在镜像层被错误删除的风险,从而导致镜像损坏。所以在运行GC之前,首选的方法是先停止Harbour。
  cd /usr/local/harbor
docker-compose stop
  3、在部署Harbour的主机上运行以下命令以预览会影响哪些文件/镜像
注:上述选项”–dry-run”将打印进度而不删除任何数据。
docker run -it --name gc --rm --volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0 garbage-collect --dry-run /etc/registry/config.yml
  4、使用以下命令执行垃圾回收并重新启动Harbour。
docker run -it --name gc --rm --volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0 garbage-collect /etc/registry/config.yml
  5、docker-compose start
  6、最后验证:
a:du -sh /data/registry/docker/registry/v2/blobs&repositories和之前该目录文件大小做对比
b:重新上传之前删除的镜像,如没成功删除会报镜像已存在,能成功上传则一切ok,恭喜




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674721-1-1.html 上篇帖子: Kong入门及docker安装 下篇帖子: Docker容器技术介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表