docker与jenkins的自动化CI/CD流水线实战

docker与jenkins的自动化CI/CD流水线实战

在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。

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

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

一、发布流程设计


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

工作流程:

  1. 开发人员提交代码到Git版本仓库;
  2. Jenkins人工/定时触发项目构建;
  3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
  4. 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
[[email protected] harbor]# yum install git -y

2、创建Git用户并设置密码
[[email protected] harbor]# useradd git
[[email protected] harbor]# passwd git

3、创建仓库
[[email protected] ~]$ mkdir java-demo.git
初始化:
[[email protected] ~]$ cd java-demo.git/
[[email protected] java-demo.git]$ git --bare init

4、登录jenkins 虚拟机-192.168.1.24
[[email protected] ~]# git clone [email protected]:/home/git/java-demo.git

5、拉去代码(试验):
[[email protected] ~]# git clone https://github.com/lizhenliang/tomcat-java-demo.git

6、更改git提交的地址

7、再提交到git仓库
[[email protected] tomcat-java-demo]# git add .
[[email protected] tomcat-java-demo]# git commit -m ‘java-demo‘
运行以下2个命令:
git config --global user.email "[email protected]"
git config --global user.name "Your Name"

[[email protected] tomcat-java-demo]# git push origin master
origin:是名字--在.git/config配置文件中
master:是主分支

8、再拉去代码:
[[email protected] tomcat-java-demo]# cd ../java-demo/
[[email protected] java-demo]# git pull

三、准备Jenkins环境

官网下载地址:https://jenkins.io/download/
如图点击下载最后一个Generic Java package(war):

免密拉取代码(从docker (192.168.1.23那台机,因为是docker那台机发布的) 免密ssh 登录到git那台机)
[[email protected] ~]# ssh-keygen

[[email protected] ~]# ssh-copy-id [email protected]

因为需要docker(192.168.1.23)发布,是获取192.168.1.25(harbor)上的镜像,需要在192.168.1.23上修改配置,才能拉取
[[email protected] java-demo]# vi /etc/docker/daemon.json

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"],"insecure-registries":["192.168.1.25"]}

重启docker

验证:
[[email protected] ~]# ssh [email protected]

准备java环境
[[email protected] tools]# tar xf jdk-8u65-linux-x64.gz -C /usr/local/
[[email protected] local]# mv jdk1.8.0_65/ jdk1.8
[[email protected] 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

[[email protected] local]# source /etc/profile
[[email protected] local]# java -version

jenkins部署:
[[email protected] tools]# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
[[email protected] tools]# tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/
[[email protected] tools]# cd /usr/local/
[[email protected] local]# mv apache-tomcat-8.5.32/ tomcat-jenkins

删除网站根目录
[[email protected] tomcat-jenkins]# cd webapps/
[[email protected] webapps]# ls
docs examples host-manager manager ROOT
[[email protected] webapps]# rm -rf *

将jenkins解压到网站根目录,就是ROOT目录下
[[email protected] webapps]# unzip /data/tools/jenkins.war -d ROOT

启动:
[[email protected] webapps]# sh ../bin/startup.sh

访问:
http://192.168.1.24:8080/

安装插件:

将https更改为http

更改完成后再重启tomcat

安装插件:
Pipeline:

SSH Slaves插件:

安装Git插件:

安装SCM API 插件

插件下载失败:
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
[[email protected] tools]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/
[[email protected] local]# mv apache-maven-3.5.0/ maven-3.5.0

创建任务

1、创建pipeline项目

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

3、编辑pipeline
node ("192.168.1.23-docker") { // 指定Slave标签
// 拉取代码
stage(‘Git Checkout‘) {
checkout([$class: ‘GitSCM‘, branches: [[name: ‘$Branch‘]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: ‘[email protected]:/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、构建:

2、如果有报错就解决

3、访问:http://192.168.1.23:88/

原文地址:http://blog.51cto.com/jacksoner/2325415

时间: 2024-08-05 14:43:41

docker与jenkins的自动化CI/CD流水线实战的相关文章

docker与jenkins的自动化CI/CD流水线实战(svn)

准备 安装完成以下环境:1.svn2.jdk3.maven4.tomcat5.jenkins 项目代码测试(php/java):https://github.com/lizhenliang 配置svn 1.查看结构 trunk:主干分支branches:其他分支tags:打标记 将代码最终打到tags目录下,打成版本号标记,然后再jenkins上发布 配置jenkins 1.新建任务 2.如果保留多个,会占用主机的磁盘空间 3.参数化构建过程,就是让你构建时选择 4.填写Pipeline若是不知

docker与jenkins的自动化CI/CD流水线实战(php-svn)

环境需求 编写dockerfile 备注:内容太长,写在自己的电脑上了流程:1.yum安装基础服务,如gcc,make,openssl2.nginx1.14.0安装3.php-7.1.19安装4.supervisord监听nginx,php服务5.#docker防止中文乱码6.安装crontabs 服务echo "/1 * bash /data/shell/check_supervisord.sh >> /root/check_supervisord.log" >&g

Jenkins与Docker的自动化CI/CD流水线实战

Jenkins与Docker的自动化CI/CD流水线实战 标签(空格分隔): docker的部分 一:什么是CI/CD 二: 发布流程设计 三:部署Git仓库并上传测试代码 一:什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous Deployment,CD):部署到测试环境.预生产环境.生产环境. 持续交付(Continuous Delivery,CD):将最终产

容器平台自动化CI/CD流水线实操

CI/CD----(实操说明) CI/CD 持续集成(Continuous Integration, CI):  代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous Deployment, CD): 部署到测试环境.预生产环境.生成环境. 持续部署(Continuous Delivery, CD):  将最终产品发布到生成环境.给用户使用. Jenkins与容器技术CI/CD实战 说明:这张图稍微更形象一点,上线之前先把代码git到版本仓库,然

Jenkins与Docker/Kubernetes的自动化CI/CD流水线实践--免费直播课等你来约

直播老师简介: 李振良·奇虎360-高级运维工程师,主要负责360浏览器业务运维.7年互联网运维工作经验,具备丰富的运维实战经验,曾主导容器云平台建设并将业务容器化部署 老师博客专栏地址:基于Kubernetes企业级容器云平台落地与实践 直播课内容大纲: 1.什么是CI/CD?2.Jenkins Pipeline2.Jenkins与Docker发布JAVA项目3.Jenkins与Kubernetes发布JAVA项目 直播时间: 2018年7月26日(本周四)晚8点30分--9点30分 QQ群直

5步实现规模化的Kubernetes CI/CD 流水线

一.背景在近几年,Kubernetes迅速成为了容器编排的事实上的开源标准.与虚拟机不同,Kubernetes在抽象化基础架构的同时可靠地大规模编排容器,这可以帮助开发人员将工作负载与基础架构的复杂性质分开.Kubernetes是CI/CD自动化的理想选择,因为它提供了许多内置功能,这些功能使应用程序部署实现标准化和可重用,提高了开发人员的生产力,并加快了云原生应用程序的采用.Platform9是成立于2013年的云服务提供商,能够提供业界唯一由SaaS管理的混合云解决方案,使用户能够快速采用云

如何使用GitLab和Rancher构建CI/CD流水线 – Part 2

这是我们使用GitLab和Rancher构建CI/CD流水线系列教程的第二部分.第一部分的内容介绍了如何部署.配置和确保GitLab在Rancher的运行.这一部分中,我们将介绍如何使用GitLab CI Multi-Runner构建容器,以及如何使用GitLab容器registry配置项目.除此之外,我们还将涉及如何用GitLab CI建立容器并部署到Rancher上. 使用GitLab CI Multi-Runner构建容器 GitLab CI是用于持续集成和持续交付的强大工具.它需要和Ra

rancher+gitlab+appveyor 实现 CI/CD 流水线(汇总)

rancher+gitlab+appveyor 实现 CI/CD 流水线 本文主要是做一些汇总,将近期接触并弄好的一些工具整合起来,弄一套流水线,减轻一定工作压力 工具介绍 所有的组件都是使用 docker 跑的,所以一款好用的 docker 的 ui 管理工具很重要,那就是rancher.这里只是用来管理一些工具,有点屈才了 项目代码托管使用 gitlab,其内置了 CI/CD,成套使用,非常方便 appveyor 也是一个 CI/CD 解决方案,基于asp.net core开发.其内置 nu

使用go mod结合docker分层缓存进行自动CI/CD

本文地址:https://www.cnblogs.com/likeli/p/10521941.html 喜大奔的go mod 官方背书的go mod拯救了我的代码洁癖症! 环境 go v1.12 docker ce 18.09.0 gitlab ce latest godep 写go程序,若是仅仅是你一个人写,或者就是写个小工具玩儿玩儿,依赖管理对你来说可能没那么重要. 但是在商业的工程项目里,多人协同,go的依赖管理就尤为重要了,之前可选的其实不太多,社区提供的实现方式大多差不多的思路,比如我