saltstack部署java应用失败无日志——CICD 部署

大家好,我是烤鸭:

​   最近在搞公司的CICD,遇到各种问题。复盘总结一下。

CICD 架构

这篇文章写得很详细,可以看一下
https://linux.cn/article-9926-1.html

而这里只是结合现在的情况分析下:

CI 持续集成(Continuous Integration)

持续交付的目标是拥有一个可随时部署到生产环境的代码库。

CD 持续交付(Continuous Delivery)、持续部署(Continuous Deployment)

作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。

自动化的、高效的,并且可重复的

目前的CICD架构(封装jenkins和发布系统,简单够用就行)

在这里插入图片描述

可以看到目前的CICD部署生产和测试环境是分开的,虽然能完成上面定义的功能,但是有很大的问题。

发布测试环境可以进行自动化测试,但发布生产环境是从jenkins打包后发布的(并不是直接copy的测试时的包)。

这就有一个问题是生产环境的发包可能和测试的不一致(有时候 测试说测的时候没问题,开发说没问题,运维也是按流程来的,问题就在这),持续交付的作用并没有发挥出来。


优化方式

目前的CICD 系统也只是封装了一层jenkins和发布系统,未来还会改版的。

待优化的部分:自动化测试、蓝绿部署、对多个版本的跟踪发布。

自动化测试 单元测试和持续测试(集成测试功能测试验收测试),目前来看 单元测试的部分是缺失的,很少写可执行的单元测试,而且没有地方执行和查看。

蓝绿部署指的是部分流量切换,预发环境和生产环境分开。目前这一部分是空白的,需要测试介入。(以前做的时候用白名单拦截入口,但是白名单和指定和维护需要线下和线上同时维护,特别麻烦。销售联系到用户,要到手机号后,加入白名单。)

对多个版本的跟踪发布指的是不同版本的协同开发,很难跟踪,不过目前是没有类似场景的,之前倒是遇到过,一个大版本开发中,又提了对当前版本的更新维护,交付时间上交叉、代码合并出现问题,测试环境的代码维持不同的版本,对测试也是挑战。

单元测试 目前来看比较容易,强制编写单元测试,如果执行失败,则算项目失败,单元测试的标准应该以产品的需求为主,测试人员检验。打包的时候可以直接执行单元测试,只是缺少对需求的关联。(测试压力大了,规范养成了,就会容易很多)

蓝绿部署需要一套完整的预发环境(就是另一套生产环境,产生的订单数据再进行同步,对订单数据进行tag处理)。至于用户群体可以以指定的规则选择(比如根据用户画像等等,用户使用习惯)。搭建一整套环境是最复杂的,尤其是针对多个部门间的协同,每个部门的规则又不一样,缺少一个都不行。(难的不是技术,是沟通协作)

多版本的跟踪发布,这个其实遇到的场景比较少,像我上面遇到的其实是比较夸张了。如果真的遇到了,需要准备针对多套测试的多套测试环境,保证测试的分支代码没问题。其次要保证测试测过的代码和线上的完全一致,不要出现因为代码合并等问题。(如果正在开发 feature分支,master分支提一个hotfix合并,要保证提测的feature是包含这个hotfix的,上线可以不合并master,直接以feature上线,上线完成后再合并。)

目前的CICD框架

用的比较多的就是 jenkins和 hudson了。

  • 项目页面:
    https://jenkins.io/
  • 源代码:
    https://github.com/jenkinsci/jenkins

github用的是 Travis CI

  • 项目页面:
    https://docs.travis-ci.com/
  • 源代码:
    https://github.com/travis-ci/travis-ci

gitlab出了GitLab CI

  • 项目页面:
    https://about.gitlab.com/product/continuous-integration/
  • 源代码:
    https://gitlab.com/gitlab-org/gitlab-ce/

这部分已经侧重到运维研发了,现在很多企业产品也有完整的解决方案(如果有人力,参考一下,开发一款适合自己公司的也不错)。

遇到的问题

维护了几天,问题比想象中的多。

  1. 比如saltstack部署java应用失败无日志,相同的代码启动成功脚本没问题,用saltstack启动不仅没日志,还没进程。最后发现,脚本中输出的日志路径是 nohup java -jar >nohup.out & ,输出的nohup.out 不在当前目录下,在/root 下面(注意脚本和jar包都需要写绝对路径,不要写相对路径)。找的日志就能发现问题了,其实之前遇到过,只是这次没日志,没及时发现。

    https://blog.csdn.net/Angry_Mills/article/details/112254459

  2. 安装docker后,dns无法解析

    vi /etc/docker/daemon.json
    

    增加 bip属性, 指定容器使用的网络,避免由于dns解析后的ip和容器网络冲突导致的无法解析

    {"bip": "192.168.1.1/24"
    }
    
  3. jenkins 发布docker 到harbor 仓库
    https://blog.csdn.net/Angry_Mills/article/details/114586569

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 浏览器是怎样判断元素是否和某个CSS选择器匹配?

[css] 浏览器是怎样判断元素是否和某个CSS选择器匹配? 有选择器: div.ready #wrapper > .bg-red 先把所有元素 class 中有 bg-red 的元素拿出来组成一个集合,然后上一层,对每一个集合中的元素,如果元素的 parent i…

idea 插件开发 扫描sqlserver

大家好,我是烤鸭: 最近在搞sqlserver 升级 mysql/tidb,发现代码里的sql有很多地方需要改,想着能不能开发一个省点力。 官方的迁移指南: https://www.mysql.com/why-mysql/white-papers/sql-server-to-mysql-zh/ 方案…

VUE之文字跑马灯效果

1.效果演示 2.相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"js/vue-2.4.0.js"></script> </head> <body> <div id&…

PMP 错题记录

PMP 错题记录 大家好&#xff0c;我是烤鸭&#xff1a; 这次的PMP错题集本来想考前发&#xff0c;临时能看看&#xff0c;还是耽搁了&#xff0c;补发一下吧&#xff0c;不知道以后用不用的上&#xff0c;据说改版了&#xff0c;可能也用不上了。 变更题错题记录 9、一项…

nginx 配置 http/2(h2) 和 http 在同一端口的问题

nginx 配置 http/2(h2) 和 http 在同一端口的问题 大家好&#xff0c;我是烤鸭&#xff1a; ​ 这个完全是个采坑记录了。 场景说明 由于这边有个需求想加个支持 grpc 方式转发的域名。 正常的二级域名都是映射到80端口&#xff0c;所以也没想太多&#xff0c;按照这个…

FutureTask isDone 返回 false

大家好&#xff0c;我是烤鸭&#xff1a; ​ 今天看一下 FutureTask源码。好吧&#xff0c;其实遇到问题了&#xff0c;哪里不会点哪里。 伪代码 package src.executor;import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.sche…

为什么MySQL数据库要用B+树存储索引

A&#xff1a;为什么MySQL数据库要用B树存储索引&#xff1f; Hash的查找速度为O(1)&#xff0c;而树的查找速度为O(log2n)&#xff0c;为什么不用Hash作为数据库的存储索引呢&#xff1f; 树的话&#xff0c;无非就是前中后序遍历、二叉树、二叉搜索树、平衡二叉树&#xff0c…

lettuce 配置域名 dns 切换

大家好&#xff0c;我是烤鸭&#xff1a; 如果你也有类似的困扰&#xff0c;运维告诉你&#xff0c;redis连接配置域名&#xff0c;这样出问题了&#xff0c;直接改dns地址就行&#xff0c;不需要重启服务。。。梦想是美好的&#xff0c;现实是残酷的。如果你使用的是 let…

zuul 1.x 和gateway性能对比

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享下 zuul和gateway 网关压测。 环境&#xff1a; windows 10 jdk 8 压测工具&#xff1a; wrk jmeter 数据对比 场景是仅单独转发&#xff0c;接口 Thread.sleep(50) jmeter 12 线程&#xff0c;30s zuul&#xf…

redisson 大量ping操作,导致 tps过高

大家好&#xff0c;我是烤鸭&#xff1a; 这个问题有点奇怪&#xff0c;新服务上线&#xff0c;redis tps居高不下&#xff0c;还都是ping命令。 环境&#xff1a; 服务 &#xff1a; 280台&#xff0c;redis集群&#xff1a;12主24从 问题 由于服务刚上线&#xff0c;还没…

PMP 学习总结

大家好&#xff0c;我是烤鸭&#xff1a; PMP终于考过了。成绩出了一个月了&#xff0c;一直想写一篇总结但没下笔&#xff0c;主要原因最近有点忙(太懒了)。考试的内容是基于第6版的。 晒个证书 证书上没写等级&#xff0c;一般都宣称5A过(其实我是 4A1T过的)。 学习过程…

处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)

非注解 处理器映射器 和 处理器适配器 处理器映射器&#xff1a; 第一种: BeanNameUrlHandlerMapping <!-- 配置Handler --> <bean id"userController1" name"/queryUsers.action" class"com.bjxb.ssm.controller.UserController" />…

Gateway Sentinel 做网关降级/流控,转发header和cookie

大家好&#xff0c;我是烤鸭&#xff1a; Springcloud Gateway 使用 Sentinel 流量控制。 环境 springcloud-gateway的网关应用&#xff0c;springboot的服务&#xff0c;nacos作为注册中心 sentinel-dashboard-1.8.2 最新版下载地址&#xff1a; https://github.com/aliba…

django后台数据管理admin设置代码

新建admin用户 createsuperuser 设定好用户名&#xff0c;邮箱&#xff0c;密码 设置setting LANGUAGE_CODE zh-hansTIME_ZONE Asia/ShanghaiUSE_I18N TrueUSE_L10N TrueUSE_TZ False 在写好的users的app下修改admin.py # -*- coding: utf-8 -*- from __future__ import u…

rocketmq 初探(一)

大家好&#xff0c;我是烤鸭&#xff1a; 今天看下rocketmq。这篇主要是简单介绍下 rocketmq以及idea 本地调试 rocketmq。 项目架构 感兴趣的可以下载源码看下。 https://github.com/apache/rocketmq 项目结构图。 rocketmq-acl: acl 秘钥方式的鉴权&#xff0c;用在bro…

客户将数据库迁移上云的常用办法

下载网站:www.SyncNavigator.CN 客服QQ1793040---------------------------------------------------------- 关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator 8.4.1 非破解版 注册机 授权激活教程 最近一直在研究数据库同步的问题&#xff0c;在网上…

基于nchan打造百万用户的聊天室

大家好&#xff0c;我是烤鸭&#xff1a; 这次介绍下nchan&#xff0c;nginx的一个module。 nchan 源码: https://github.com/slact/nchan 官网: https://nchan.io/ nginx 配置说明文档: https://nchan.io/documents/nginxconf2016-slides.pdf 测试环境搭建 4 台linux cent…

rocketmq 初探(二)

大家好&#xff0c;我是烤鸭&#xff1a; 上一篇简单介绍和rocketmq&#xff0c;这一篇看下源码之注册中心。 namesrv 先看两个初始化方法 NamesrvController.initialize() 和 NettyRemotingServer.start(); public boolean initialize() {// 加载配置文件this.kvConfigMana…

2 JVM 运行机制

转载于:https://www.cnblogs.com/likevin/p/10186591.html

WIN10远程连接时提示内部错误

微软官方的解决方案是重置远程连接设置&#xff0c;步骤如下&#xff1a; 1、以管理员身份运行命令提示符 2、输入以下命令&#xff1a; netsh winsoc reset 随后会提示重启电脑&#xff0c;遂解决。 3、重启后还不行的话&#xff0c;再试试删除掉远程连接保存的凭据&#xff0…