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

栏目: Java · 发布时间: 5年前

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

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

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

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

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

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

一、发布流程设计

docker与jenkins的自动化CI/CD流水线实战 总结:开发===》提交代码到Git/Svn===>推送到Jenkins====>通过代码编译、构建镜像、推送===》Docker Registry(harbor)===>docker环境拉去仓库信息==》发布

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

工作流程:

  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

[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提交的地址

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

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与jenkins的自动化CI/CD流水线实战

免密拉取代码(从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

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

安装插件:

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

将https更改为http

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

更改完成后再重启tomcat

安装插件:

Pipeline:

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

SSH Slaves插件:

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

安装Git插件:

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

安装SCM API 插件

jenkins 安装docker slave节点

master 只是调度,slave运行,这样matser压力就小很多

1、安装jdk环境 ---192.168.1.23

1.1 安装git

yum install git -y

2、新建节点

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

3、

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

4、添加192.168.1.23 root账号

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

5、添加java路径

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

6、保存

7、保存就启动了:

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

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项目

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

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

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

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、构建:

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

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

2、如果有报错就解决

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

矩阵计算

矩阵计算

Gene H.Golub、Charles F.Van Loan / 袁亚湘 / 人民邮电出版社 / 2011-3-1 / 89.00元

本书是国际上数值计算方面的权威著作,有“圣经”之称。被美国加州大学、斯坦福大学、华盛顿大学、芝加哥大学、中国科学院研究生院等很多世界知名学府用作相关课程的教材或主要参考书。 本书系统地介绍了矩阵计算的基本理论和方法。书中的许多算法都有现成的软件包实现,每节后还附有习题,并有注释和大量参考文献,非常有助于自学。一起来看看 《矩阵计算》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具