docker与jenkins的自动化ci/cd流水线实战(代码片段)

author author     2023-01-29     239

关键词:

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/

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

准备安装完成以下环境:1、svn2、jdk3、maven4、tomcat5、jenkins项目代码测试(php/java):https://github.com/lizhenliang配置svn1、查看结构trunk:主干分支branches:其他分支tags:打标记将代码最终打到tags目录下,打成版本号标记,然后再jenk... 查看详情

ci/cd——构建企业级docker+jenkins+git+harbor流水线自动化持续集成持续发布平台(代码片段)

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图GitGithubGitlab的区别前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水... 查看详情

ci/cd——构建企业级docker+jenkins+git+harbor流水线自动化持续集成持续发布平台(代码片段)

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图GitGithubGitlab的区别前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水... 查看详情

jenkins与docker的自动化ci/cd实战(代码片段)

一、发布流程设计工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Jenkins在Docker主机创建容器并发布。环境规划如下:角色IPGit/Registry192.168.56.1... 查看详情

jenkins与docker的自动化ci/cd实战(代码片段)

...续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。一、发布流程设计工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Je... 查看详情

ci与cd之docker上安装jenkins(代码片段)

...步的使用,这也是持续集成的目的,CI是属于开发人员的自动化流程。 CD:持续交付(ContinuousDelivery)和持续部署(ContinuousDeployment),这里查阅了一些资料,并简单总结了一下:    1.持续交付意味着所有的变更都可以随时交... 查看详情

ci与cd之docker上安装jenkins(代码片段)

一.CI,CD,Jenkins的介绍CI:持续集成(Continuousintegration,简称CI),在传统的软件开发环境中,有集成,但是没有持续集成这种说法,长时间的分支与主干脱离,导致分支与主干可能存在较大偏差,在集成代码的时候可能需要花费数... 查看详情

实践:基于azure部署jenkins服务并开发mern应用的ci/cd构建管道

...耗时的过程,有时会导致错误。因此,我们需要以持续和自动化的方式执行此操作——这就是您将在本文中学到的内容。我们将讨论如何通过使用Jenkins设置CI/CD管道来改进MERN(MongoDB、Express、React和NodeJs)应用程序开发过程。您... 查看详情

docker——jenkins+git+registry构建自动化持续集成环境(ci/cd)(代码片段)

...部署、交付(CD)。本文基于Jenkins+Docker+GitSvn实现一套CI自动化发布流程,同时支持撤回。  一、发布流程设计工作流程:开发人员提交代码到Git或Svn版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、... 查看详情

ci/cd技术专题「jenkins实战系列」jenkins+pipeline构建自动化部署(代码片段)

...ipeline(流水线技术),那为什么要用Pipeline呢?实现自动化构建,其中Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以... 查看详情

通过jenkins与docker构建ci/cd基础架构(代码片段)

###前言提到容器平台,最早接触的便是LXC(LinuxContainer),是2010年刚刚接触虚拟化平台的时候,当时开源解决方案是xen的天下(后来KVM才后来者居上),且性能各方面都不弱,价值当时还不是移动互联网时代,业务量远远没有那么... 查看详情

ci/cd之jenkins(代码片段)

jenkinsCI/CD简介jenkins简介jenkins安装安装jenkins插件安装中文插件安装流水线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI... 查看详情

ci/cd之jenkins(代码片段)

jenkinsCI/CD简介jenkins简介jenkins安装安装jenkins插件安装中文插件安装流水线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

...发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。在阅读和实践本... 查看详情

kubernetes基于jenkinsspinnaker的ci/cd实践一增加制品镜像扫描(代码片段)

前言:早期jenkins承担了kubernetes中的ci/cd全部功能JenkinsPipeline演进,这里准备将cd持续集成拆分出来到spinnaker!当然了正常的思路应该是将jenkinsspinnaker的用户账号先打通集成ldap.spinnaker账号系统已经集成ldap.jenkins之前也做过相关... 查看详情

ci/cd的实践

参考技术A阿里云的Docker镜像源添加docker服务基本的操作得到密钥后填入,继续然后再点击去安装推荐插件docker的架构是C/S架构。在我们使用docker命令时,其实是命令使用socket与docker的守护进程进行通信,我们需要将jenkins添加到d... 查看详情