Jenkins+Pipeline流水线+Docker实现自动化CI/CD发布Java项目

流水线流程

在这里插入图片描述

  • 1)开发人员提交代码到Git版本仓库;

  • 2)Jenkins人工/定时触发项目构建;

  • 3)Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;

  • 4)Jenkins在Docker主机创建容器并发布。

环境

  • 192.168.100.10:开发人员电脑
  • 192.168.100.11:git仓库
  • 192.168.100.12:jenkins服务器
  • 192.168.100.13:harbo服务器
  • 192.168.100.14:web业务服务器

Git服务器搭建

[root@git-server ~]# useradd git	//创建一个用户
[root@git-server ~]# passwd git		//配置密码
Changing password for user git.
New password:
[root@git-server ~]# yum -y install git	//安装git管理系统
[root@git-server ~]# useradd git
[root@git-server ~]# su - git //切换用户
[git@git-server ~]$ mkdir repos	//创建仓库
[git@git-server ~]$ cd repos		//进入仓库
[git@git-server repos]$ mkdir app.git	//创建项目
[git@git-server repos]$ cd app.git		//进入项目目录
[git@git-server app.git]$ git --bare init	//初始化项目目录,生成仓库信息
Initialized empty Git repository in /root/repos/app.git/
[git@git-server app.git]$ ls	//查看仓库信息
branches  config  description  HEAD  hooks  info  objects  refs

切换到开发人员主机

[root@client ~]# ssh-keygen 	//生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 	//回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 	//回车
Enter same passphrase again: 		//回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rZQh36zgWoHGh+xmEVIEP+I491iltmVFdgRaWFJF7mA root@client
The key's randomart image is:
+---[RSA 2048]----+
|  .oo .+B==      |
|   o  .* o       |
|  o + + E .      |
| o = B = O       |
|o o @ * S =      |
| o B B + o       |
|  . * o o        |
|   o o           |
|    .            |
+----[SHA256]-----+
[root@client ~]# ssh-copy-id git@192.168.100.11	//复制秘钥到git服务器的git用户
[root@client ~]# git clone git@192.168.100.11:/home/git/repos/app.git	//拉取项目
[root@client app]# git clone https://github.com/407777853/java-demo	//拉取一个项目作为代码
[root@client ~]# mv java-demo/* app/
[root@client ~]# cd app
[root@client app]# vim .git/config	//修改配置文件
... ...
[remote "origin"]
        url = git@192.168.100.11:/home/git/repos/app.git	//修改默认提交代码位置
... ...
[root@client app]# git add .
[root@client app]# git config --global user.name "Your Name" && git config --global user.email you@example.com	//配置本地仓库用户名与email
[root@client app]# git commit -m "hhh"	//提交代码到本地仓库
[root@client app]# git push origin master //提交代码到master仓库

jenkins服务器搭建

[root@jenkins-server ~]# tar xvf apache-maven-3.8.1-bin.tar.gz -C /usr/local/	//解压maven到安装目录
[root@jenkins-server ~]# cd /usr/local/	//进入安装目录
[root@jenkins-server local]# mv apache-maven-3.8.1/ maven	//更改目录名称
[root@jenkins-server ~]# docker pull jenkins/jenkins:lts-jdk11	//拉取jenkins镜像
[root@jenkins-server ~]# mkdir /docker/jenkins -p	//将docker工作目录对外挂载
[root@jenkins-server ~]# chmod 777 /docker/jenkins/ //对此目录开放权限
[root@jenkins-server ~]# docker run -itd -p 9003:8080 -p 9004:50000  --restart always -v /var/run/docker.scok:/var/run/docker.scok -v $(which docker):$(which docker) -v /docker/jenkins:/var/jenkins_home -v /usr/local/maven/:/usr/local/maven/ --name jenkins  jenkins/jenkins:lts-jdk11 	//运行jenkins容器
38816e2e55d87604533483cc6d24ddd7958d1923c0eb77165a1e2db66f30022b
[root@jenkins-server ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS                                  PORTS     NAMES
38816e2e55d8   jenkins/jenkins:lts-jdk11   "/sbin/tini -- /usr/…"   6 seconds ago   Restarting (1) Less than a second ago             jenkins

[root@jenkins-server ~]# docker logs -f jenkins	//追踪日志查看密码
... ...
4ee07183daa14ce6bf5f8fecc0e0c82b
... ...

通过浏览器访问:
jenkins安装详情

Harbor服务器搭建

下载harbor链接
https://github.com/goharbor/harbor/releases/tag/v2.2.3

[root@harbor-server harbor]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose	//安装docker -compose
[root@harbor-server harbor]# chmod +x /usr/local/bin/docker-compose	//赋予执行权限
[root@harbor-server ~]# tar xf harbor-offline-installer-v2.2.3.tgz	//解压
[root@harbor-server ~]# cd harbor/
[root@harbor-server harbor]# mv harbor.yml.tmpl harbor.yml	//修改配置文件名称
[root@harbor-server harbor]# vim habor.yml	//修改配置文件

在这里插入图片描述

[root@harbor-server harbor]# ./prepare	//检测并创建harbor需要的环境
[root@harbor-server harbor]# ./install.sh	//安装harbor

浏览器访问80端口
在这里插入图片描述
测试是否能成功上传
回到jenkins服务器

[root@jenkins-server ~]# docker pull tomcat:8-jdk8-adoptopenjdk-openj9	//拉取一个tomcat镜像
[root@git-server app.git]# docker tag tomcat:8-jdk8-adoptopenjdk-openj9 192.168.100.13/library/tomcat:v1	//更改tag
[root@jenkins-server ~]# vim /etc/docker/daemon.json	//修改配置文件
{"insecure-registries":["192.168.100.13"]}	#信任harbor仓库

[root@jenkins-server ~]# systemctl restart docker	//重启daocker
[root@jenkins-server ~]# docker login -uadmin -pHarbor12345 192.168.100.13	//登录到docker仓库
[root@git-server app.git]# docker push 192.168.100.13/library/tomcat:v1	//上传镜像

在harbor服务器上查看
在这里插入图片描述

配置jenkins

回到git服务器

[git@git-server ~]# ssh-keygen 	//生成秘钥对,一路回车

[git@git-server app.git]$ cat ~/.ssh/id_rsa	//查看私钥并复制

浏览器访问jenkins
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pipeline脚本

node {
   stage('Git Checkout') { 
      checkout([$class: 'GitSCM', branches: [[name: '${version}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b4f39d68-f3b2-436a-8259-df4d75fae4bc', url: 'git@192.168.100.11:/home/git/repos/app.git']]])
   }
   stage('Maven Build') {
        sh '''
        /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
        '''
   }
   stage('Build and Push Image') {
		sh '''
		REPOSITORY=192.168.100.13/library/javademo:${version}
		cat  <<-EOF > Dockerfile
		FROM 192.168.100.13/library/tomcat:v1
		MAINTAINER Zhipeng-He<2281317917@qq.com>
		EXPOSE 8080
		RUN rm -rf /usr/local/tomcat/webapps/*
		ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
		EOF
		docker build -t $REPOSITORY .
		docker login -uadmin -pHarbor12345 192.168.100.13
		docker push $REPOSITORY	 
		'''
	}
	stage('Deploy to Docker') { 
		sh ''' 
		REPOSITORY=192.168.100.13/library/javademo:${version}
		docker rm -f javademo |true
		docker pull $REPOSITORY
		docker container run -d --name javademo -p 8081:8080 $REPOSITORY
		'''
	}
}

在这里插入图片描述

在这里插入图片描述

继上次发布,问题未能解决:

docker部署出现问题后,咋都不能解决以上问题,后来使用了yum的方式焊装了jenkins,瞬间成功,干,很纳闷
在这里插入图片描述
浏览器访问后就成功了

远程部署项目到192.168.100.14脚本

stage('Deploy to Docker') { 
		sh ''' 
		cat <<-EOF > pull.sh
		echo '{"insecure-registries":["192.168.100.13"]}' > /etc/docker/daemon.json
		systemctl restart docker
		docker logout
		docker login -uadmin -pHarbor12345 192.168.100.13
		sleep 5
		REPOSITORY=192.168.100.13/library/javademo:${version}
		docker rm -f javademo |true
		docker pull \\$REPOSITORY
		docker container run -d --name javademo -p 8080:8080 \\$REPOSITORY
		EOF
		scp pull.sh root@192.168.100.14:/root/
		ssh root@192.168.100.14 /bin/bash /root/pull.sh
		'''
	}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屎到淋头还嚼便

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值