基于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 ...
随机推荐
- React函数式组件值之useRef()和useImperativeHandle()
一.useRef useRef共有两种用法,获取子组件的实例(只有类组件可用),在函数组件中的一个全局变量,不会因为重复 render 重复申明, 类似于类组件的 this.xxx. 1. useRe ...
- Win10在线升级Win11
下载微软官方在线升级工具,直接一键在线升级 https://www.microsoft.com/zh-cn/software-download/windows11/ 右键菜单一键恢复win10风格,管 ...
- vdom diff
其实diff的核心在于两点: 比对(diff的运算过程) 修改(diff的返回结果,输出生成的patch并操作) 树的BFS(广度优先遍历)/DFS(深度优先遍历),需要O(N)的时空复杂度 传统di ...
- windows下搭建stm8s开发环境
拓扑:windows -> st_link_v2 ->目标板,目标板不由st_link_v2供电 接线: st_link_v2: NRST GND SWIM 3V3 ↓ ↓ ↓ ↓ 目标板 ...
- 小白之Linux基础命令
命令大全 : http://man.linuxde.net/touch --------------------------20170802晚linux ls--显示当前路径下的文件及文件夹名字cd ...
- 入坑winpdb-1.4.8
这几天莫名的不能在docker中使用winpdb-1.4.8调试,把容器重新安装了也不行,跟踪调试以后发现原因是容器中使用pycryptodemo作为rpdb2的加密库,加密向量IV需要以bytes类 ...
- GoLand 和 Pycharm的 快捷键设置与常用插件
GoLand 插件 Gopher 美化进度条,让等待更优雅. CodeGlance pro 旁边浏览框. 快捷键设置 删除行: ctrl + L 重新格式化代码 ctrl + K 开始新行 ctrl ...
- Vue 双向绑定
devtools工具 使用devtools工具可以让你更加方便的查看到Vue实例中数据的变化. 在chorme商店搜索安装即可. 双向绑定 v-model 双向绑定一般都是与input家族进行绑定. ...
- DoTween结束后删除对象
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- gitee 上传远程仓库失败
1:添加本地id_rsa.pub文件内容到gitee SSH Keys (添加公开密钥) 2:设置本地的邮箱和用户名 git config --global user.name "MARS& ...