内容简介:在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。
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
安装插件:
将https更改为http
更改完成后再重启tomcat
安装插件:
Pipeline:
SSH Slaves插件:
安装Git插件:
安装SCM API 插件
插件下载失败:
http://updates.jenkins-ci.org/download/plugins/ 这里下载
然后再上传插件
https://blog.csdn.net/KingBoyWorld/article/details/77923615jenkins 安装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中定义的
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、构建:
2、如果有报错就解决
3、访问: http://192.168.1.23:88/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- DockOne微信分享(二零零):龙腾出行基于Kubernetes的DevOps流水线实战
- DevOps 测试流水线
- Hiredis 实现 Redis 流水线
- Spark机器学习数据流水线
- Electron 应用的流水线设计
- WebRTC 的音频处理流水线
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!