基于Jenkins实现可腹部回滚的cicd平台
- Jenkins :是一个开源的实现持续集成的工具,可以实施监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能用图表的形式直观的展示出项目构建的趋势和稳定性
- maven:只有在Java项目时才会使用,帮助实现Java项目的打包
- ansible:自动化运维工具,实现批量系统配置,批量程序部署,批量运行命令等
基于Jenkins+git+docker 发布Java项目
192.168.200.10 git Git/Docker registry
192.168.200.20 jenkins jenkins
192.168.200.14 docker docker
[root@docker ~]# setenforce 0
setenforce: SELinux is disabled
[root@docker ~]# iptables -F
[root@docker ~]# systemctl stop firewalld
[root@docker ~]# systemctl stop NetworkManager
配置Git模拟开发提交
[root@Git ~]# rpm -q git
git-1.8.3.1-19.el7.x86_64
[root@Git ~]# useradd git
[root@Git ~]# passwd git #设置密码123456
#配置jenkins主机上免交互拉取Git仓库
[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# ssh-copy-id git@192.168.200.14
[root@jenkins ~]# ssh git@192.168.200.20 #测试git
[git@Git ~]$ exit
#在git服务器上创建probe仓库
[root@Git ~]# su - git
Last login: Thu Nov 4 00:13:20 PDT 2021 from server01 on pts/1
[git@Git ~]$ mkdir probe.git
[git@Git ~]$ cd probe.git/
[git@Git probe.git]$ git --bare init
Initialized empty Git repository in /home/git/probe.git/
#从GitHub拉取开源Java博客系统psi-probe代码
[root@jenkins ~]# git clone https://github.com/psi-probe/psi-probe.git #
psi-probe
[root@jenkins psi-probe]# ls
CODE_OF_CONDUCT.md LICENSE psi-probe-core psi-probe-tomcat9
CONTRIBUTING.md LICENSE_HEADER psi-probe-rest psi-probe-web
docs mvnw psi-probe-tomcat10 README.md
eclipse-java-google-style.xml mvnw.cmd psi-probe-tomcat7 src
intellij-java-google-style.xml pom.xml psi-probe-tomcat85
#移除旧地址,添加新的地址
[root@jenkins psi-probe]# git remote remove origin
[root@jenkins psi-probe]# git remote add origin git@192.168.200.20:/home/git/probe.git
#提交git仓库并创建tag
[root@jenkins psi-probe]# git add .
[root@jenkins psi-probe]# git config --global user.email "crushlinux@163.com"
[root@jenkins psi-probe]# git config --global user.name "crushlinux"
#创建标签
[root@jenkins psi-probe]# git tag 1.0.0
#推送git服务器
[root@jenkins psi-probe]# git push origin 1.0.0
Counting objects: 33856, done.
Compressing objects: 100% (9923/9923), done.
Writing objects: 100% (33856/33856), 22.14 MiB | 30.88 MiB/s, done.
Total 33856 (delta 20073), reused 33849 (delta 20067)
To git@192.168.200.20:/home/git/probe.git
* [new tag] 1.0.0 -> 1.0.0
配置docker仓库
#在git上部署docker私有仓库
[root@Git ~]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
[root@Git ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed58b50e06bf registry "/entrypoint.sh /etc…" 5 minutes ago Up 7 seconds 0.0.0.0:5000->5000/tcp registry
#在所有主机上配置连接git
[root@jenkins ~]# vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.200.20:5000"]
}
[root@jenkins ~]# systemctl daemon-reload
[root@jenkins ~]# systemctl restart docker
#测试能否上传镜像到私有仓库git上
[root@docker ~]# cat centos-7-x86_64.tar.gz | docker import - centos:7
sha256:4240ca40f3e88720b2b64bbff21b2f5ec24a9d7dace62f17ea8bb9dd468709ec
[root@docker ~]# docker tag centos:7 192.168.200.20:5000/centos:7
[root@docker ~]# docker push 192.168.200.20:5000/centos:7
The push refers to repository [192.168.200.20:5000/centos]
c664eb1dcbf0: Pushed
7: digest: sha256:7a34258489e0bc4049641cd821aa18f2740a8d62c5a72b70ac7d6e645f5c195a size: 529
#查看registry上传的镜像
[root@docker ~]# curl http://192.168.200.20:5000/v2/_catalog
{"repositories":["centos"]}
[root@docker ~]# curl http://192.168.200.20:5000/v2/centos/tags/list
{"name":"centos","tags":["7"]}
#测试能否下载,因为有缓存所有速度特别快
[root@docker ~]# docker rmi 192.168.200.20:5000/centos:7
Untagged: 192.168.200.20:5000/centos:7
Untagged: 192.168.200.20:5000/centos@sha256:7a34258489e0bc4049641cd821aa18f2740a8d62c5a72b70ac7d6e645f5c195a
[root@docker ~]# docker pull 192.168.200.20:5000/centos:7
7: Pulling from centos
Digest: sha256:7a34258489e0bc4049641cd821aa18f2740a8d62c5a72b70ac7d6e645f5c195a
Status: Downloaded newer image for 192.168.200.20:5000/centos:7
192.168.200.20:5000/centos:7
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.200.20:5000/centos 7 4240ca40f3e8 5 minutes ago 589MB
centos 7 4240ca40f3e8 5 minutes ago 589MB
#构建Tomcat镜像
在Jenkins和docker上安装jdk;
[root@docker ~]# tar xf jdk-8u191-linux-x64.tar.gz
[root@docker ~]# mv jdk1.8.0_191 /usr/local/java
[root@docker ~]# vim Dockerfile
FROM centos:7
MAINTAINER crushlinux
ENV VERSIOL=8.5.16
ENV JAVA_HOME /usr/local/java
ADD ./apache-tomcat-${VERSION}.tar.gz /tmp
RUN cd /tmp && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-$(VERSION).tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapp/ROOT
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
[root@docker ~]# docker build -t 192.168.200.20:5000/tomcat-85 . //构建镜像
基于Jenkins实现可腹部回滚的cicd平台的更多相关文章
- Jenkins实用发布与回滚PHP项目生产实践
目录 1.概述 2.项目实践 2.1.环境说明 2.2.Jenkins配置 2.2.1.修改Jenkins的运行用户 2.2.2.配置Jenkins用户和Gitlab的ssh-key 2.2.3.Je ...
- Jenkins版本迭代以及回滚
一.摘要 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 镜像打的是latest版,如果需要回滚的话,就比较麻烦了 ...
- jenkins 打标签实现回滚
背景介绍: 本项目代码存储在gitlab,再通过jenkins发布到对应的节点上. 使用tag控制版本:每一次成功的构建,jenkins会自动为gitlab的分支打上tag,版本更新可直接选择prod ...
- jenkins之代码部署回滚脚本
#!/bin/bash DATE=`date +%Y-%m-%d_%H-%M-%S` METHOD=$1 BRANCH=$2 GROUP_LIST=$3 function IP_list(){ if ...
- jenkins:一键回滚站点集群
最近在学习jenkins过程中整理了大量资料,都收录在<jenkins自动化工具使用教程>,但依然缺少一些具体实现细节. 这篇文章,介绍jenkins做集群回滚时的两个设计方案,让一键回滚 ...
- 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本
小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...
- Django数据库--事务及事务回滚
数据库的读写操作中,事务在保证数据的安全性和一致性方面起着关键的作用,而回滚正是这里面的核心操作.Django的ORM在事务方面也提供了不少的API.有事务出错的整体回滚操作,也有基于保存点的部分回滚 ...
- PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)
PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版) 先看流程图: 大概介绍一下: 版本选择使用jenkins 中的 git parameter 插件实现 回滚方式 ...
- Jenkins使用FTP进行一键部署及回滚(Windows)
前提条件: 1.必须有两台服务器,一个是生产环境,另一个是测试环境. 2.两台服务器上都必须安装了Jenkins. 3.其中,生产环境上的Jenkins已经开通的CLI的权限(Windows参考:ht ...
- 9.2 k8s结合Jenkins与gitlab实现代码升级与回滚
1.部署Jenkins 1.1 安装jdk # apt 安装jdk11 apt install openjdk-11-jdk # 查看 root@jenkins:~# java -version op ...
随机推荐
- python调用golang代码
一.调用步骤: 将go代码编译成so库 -> python中通过ctypes引用so库并指定需要调用的函数(同时可指定传入参数类型和返回值类型) -> 指定后按python使用函数方式调用 ...
- Flurl 组件使用
简介 先发上官网地址:https://flurl.dev/ Flurl 是一个异步的.可测试的.可移植的.URL 构建器和 .NET 的 HTTP 客户端库:Flurl 在NuGet上可用,可免费用于 ...
- error RC2104 : undefined keyword or key name: Invalid
检查.rc文件是否存在有未定义的宏常量就使用了,如果没发现就检查常量字符串表(STRINGTABLE)是否存在特殊字符,例如: " /" " 这种东西在里面,发现的话能删 ...
- jquery 去除兄弟节点的class
function chooseCategory(dicCode,obj){ $(obj).siblings('a').removeClass("active"); $(obj).a ...
- popen函数和pyinstaller打包之 -w冲突
启发文章:https://www.jb51.net/article/184731.htm 之前我也是用到了os.popen()这个函数 1.os.popen(self.excel_path) 括号里 ...
- 第十三天笔记Cookie
第十三天笔记Cookie 计算机重要的四个内容 数据结构 数据存储的结构及逻辑的体现,以及相关数据结构之间的操作(算法) 操作系统 windows(dos命令).linux(指令操作) 计网 网络通信 ...
- 根据Query的名字查找是那个CLF逻辑中使用
select cdodefinition.cdoname, CLFeventMap.Name "Method", CLFDefinition.CLFNAME CLF--, CLFS ...
- django 关联类 DoesNotExist: User matching query does not exist.
问题就是 关联类为空找不到 在或者geattr / hasattr / obj. item 会抛出异常 无法通过判断处理 捕获异常 try: tmp_data['demand_dept_name'] ...
- hive元起动报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
错误原因: 1.系统找不到这个类所在的jar包 2.jar包的版本不一样系统不知道使用哪个. hive启动报错的原因是后者 解决办法: 1.com.google.common.base.Precond ...
- 计算机科学导论-第三版-学习笔记-chapter2-数字系统
原本看答案的网站被上保护了,我没账号看不了,开摆. 猜测是那边的学生做作业用chatGPT,部分教师觉得不行,禁止使用的同时把答案都上锁了. 也可能是单纯因为我没报课就没账号. 复习题 1.定义一个数 ...