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/


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

查看所有标签

猜你喜欢:

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

Twenty Lectures on Algorithmic Game Theory

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》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具