聊聊DevOps制品管理-不止是存储制品这么简单

制品管理是DevOps流程中不可或缺的一部分,它涉及到构建产物的存储、版本控制、安全性和流转。制品包括各种格式的二进制文件,如Java的JAR、WAR,Docker镜像等。制品管理工具如Nexus、Jfrog Artifactory和Harbor提供统一的管理平台,解决版本混乱、依赖安全和效率问题。制品管理涉及规范命名、权限控制,同时需关注开源组件的安全风险,如SBOM用于跟踪软件组件。良好的制品管理能提升研发效率,确保安全,并促进团队协作。

什么是制品?#

制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件;这些二进制文件通常用于运行在服务器上或者作为编译依赖,“制品的管理”是配置管理的重要组成部分。

通常,这些组件是各种文件的存档,包括:类文件中的Java字节码、C对象文件、文本文件、二进制文件。组件的多种格式,例如:Java JAR,WAR,EAR格式;普通ZIP或.tar.gz文件;其他软件包格式,例如NuGet软件包,Ruby gems,NPM软件包;可执行文件格式,例如.exe 或.sh 文件,Android APK文件,各种安装程序格式。

按照使用场景,制品大致分为三类

  1. 外部引入的第三方组件
  2. 产品内部依赖包,公共SDK
  3. 产品交付安装包

image.png
按照开发语言,制品类型包含以下类型:

  • Generic File 指的是通用文件类型的制品。
  • Docker
  • Maven
  • npm
  • PyPI
  • Helm
  • Composer
  • NuGet
  • Conan

image.png

为什么要制品管理?#

  1. 外部依赖下载慢
  • 影响研发构建速度
  1. 版本管理混乱 (svn,ftp)
  • 交付包使用FTP或者SVN进行管理,管理粒度相对较粗;在这种粗放式的制品管理方式下,不同类型包的存储与获取是一件头疼的事情,版本追踪极其混乱,团队协作也是障碍重重。
  • 由于受到监管约束,一键部署是不可能任务,跨网段的包交付智能依赖于手工拷贝
  1. 安全漏洞风险
  • 依赖组件越多,引入漏洞的风险也越高
  • 第三方依赖包下载管理混乱,没有准入管控
  • 漏洞藏的越深,修复漏洞所花费的时间就越长
  1. 制品存储风险
  • 团队内部搭建的制品库是单点的,缺乏集群部署
  1. 资源浪费
  • 因为没有统一的制品库,存在重复建设的问题;维护成本高,或者说目前根本就没有维护

image.png

制品和CI/CD流水线#

[root@ip-10-1-2-224 logs]# ps aux | grep java root 166922 0.1 5.0 4785424 397856 ? Sl 10:02 0:27 java -server -Xms2G -Xmx2G -Xss256K -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+DisableExplicitGC -XX:+PrintGCDetails -Xloggc:/data/devops/camel-web-sql/logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/devops/camel-web-sql/logs/trade.dump -Djava.net.preferIPv4Stack=true -Dlog4j.configurationFile=config/logback-spring.xml -Dspring.config.name=application -classpath /data/devops/camel-web-sql/config:/data/devops/camel-web-sql/lib/aspectjweaver-1.9.7.jar:/data/devops/camel-web-sql/lib/attoparser-2.0.5.RELEASE.jar:/data/devops/camel-web-sql/lib/commons-codec-1.15.jar:/data/devops/camel-web-sql/lib/commons-lang3-3.12.0.jar:/data/devops/camel-web-sql/lib/druid-1.2.18.jar:/data/devops/camel-web-sql/lib/fastjson-1.2.83.jar:/data/devops/camel-web-sql/lib/hutool-all-5.8.21.jar:/data/devops/camel-web-sql/lib/jackson-annotations-2.13.3.jar:/data/devops/camel-web-sql/lib/jackson-core-2.13.3.jar:/data/devops/camel-web-sql/lib/jackson-databind-2.13.3.jar:/data/devops/camel-web-sql/lib/jackson-datatype-jdk8-2.13.3.jar:/data/devops/camel-web-sql/lib/jackson-datatype-jsr310-2.13.3.jar:/data/devops/camel-web-sql/lib/jackson-module-parameter-names-2.13.3.jar:/data/devops/camel-web-sql/lib/jakarta.annotation-api-1.3.5.jar:/data/devops/camel-web-sql/lib/java-jwt-3.10.3.jar:/data/devops/camel-web-sql/lib/jsch-0.2.9.jar:/data/devops/camel-web-sql/lib/jul-to-slf4j-1.7.36.jar:/data/devops/camel-web-sql/lib/log4j-api-2.17.2.jar:/data/devops/camel-web-sql/lib/log4j-to-slf4j-2.17.2.jar:/data/devops/camel-web-sql/lib/logback-classic-1.2.11.jar:/data/devops/camel-web-sql/lib/logback-core-1.2.11.jar:/data/devops/camel-web-sql/lib/lombok-1.18.16.jar:/data/devops/camel-web-sql/lib/mysql-connector-java-8.0.28.jar:/data/devops/camel-web-sql/lib/redshift-jdbc42-2.1.0.1.jar:/data/devops/camel-web-sql/lib/riam-token-util-1.0-SNAPSHOT.jar:/data/devops/camel-web-sql/lib/slf4j-api-1.7.36.jar:/data/devops/camel-web-sql/lib/snakeyaml-1.30.jar:/data/devops/camel-web-sql/lib/spring-aop-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-beans-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-boot-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-autoconfigure-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-aop-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-json-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-logging-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-thymeleaf-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-tomcat-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-boot-starter-web-2.7.2.jar:/data/devops/camel-web-sql/lib/spring-context-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-core-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-expression-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-jcl-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-web-5.3.22.jar:/data/devops/camel-web-sql/lib/spring-webmvc-5.3.22.jar:/data/devops/camel-web-sql/lib/thymeleaf-3.0.15.RELEASE.jar:/data/devops/camel-web-sql/lib/thymeleaf-extras-java8time-3.0.4.RELEASE.jar:/data/devops/camel-web-sql/lib/thymeleaf-spring5-3.0.15.RELEASE.jar:/data/devops/camel-web-sql/lib/tomcat-embed-core-9.0.65.jar:/data/devops/camel-web-sql/lib/tomcat-embed-el-9.0.65.jar:/data/devops/camel-web-sql/lib/tomcat-embed-websocket-9.0.65.jar:/data/devops/camel-web-sql/lib/unbescape-1.1.6.RELEASE.jar:/data/devops/camel-web-sql/lib/web-sql.jar:/data/devops/camel-web-sql/lib/web-sql.jar.back20240607:/data/devops/camel-web-sql/lib/web-sql.jar.back2024060702: com.camelgames.sql.Application root 177500 0.0 0.0 222316 2052 pts/0 S+ 15:19 0:00 grep --color=auto java如何将这个Java程序结束运行
04-02
<think>嗯,用户问的是如何结束运行那个Java程序。首先我需要看一下他提供的ps aux | grep java的输出。输出的内容显示有一个Java进程,PID是166922,运行的是com.camelgames.sql.Application。用户可能想终止这个进程,但作为新手,可能需要详细的步骤指导。 首先,我应该确认用户是否有足够的权限。因为进程是由root用户运行的,所以需要使用sudo或者root权限来终止。然后,常见的终止命令是kill,后面跟PID。这里PID是166922,所以命令可能是kill 166922。不过,如果进程没有响应,可能需要用kill -9强制终止,但这样可能会导致数据丢失,所以最好先尝试普通kill。 另外,用户可能需要检查进程是否真的被终止了,可以再次运行ps aux | grep java来确认。还有,用户可能不太熟悉如何查找PID,所以需要明确说明如何从输出中找到进程号。比如,第二列就是PID,这里是166922。 同时,用户提供的Java命令行参数中有一些配置,比如内存设置、GC日志、HeapDump路径等,这些可能在终止前需要考虑是否有未保存的数据或日志需要处理。但用户当前的问题只是如何结束进程,可能不需要涉及这些细节,除非有特殊情况。 需要提醒用户谨慎使用kill -9,因为它是强制终止,可能导致资源未正确释放。但根据进程状态,这里可能是一个常规的Java应用,普通kill应该有效。如果用户遇到进程无法终止的情况,再建议使用kill -9。 另外,用户可能是在服务器上操作,所以需要确认是否真的需要终止该进程,避免影响其他服务。不过根据进程名camel-web-sql,可能是特定的应用,用户应该知道自己在做什么。 总结步骤应该是:1. 使用kill PID正常终止;2. 检查是否成功;3. 如果失败,使用kill -9 PID强制终止;4. 再次确认进程是否结束。同时注意权限问题,可能需要sudo。</think>好的,我来分步骤说明如何终止这个Java进程: 1. **确认进程信息**: - 进程PID:`166922`(第二列) - 启动命令:`com.camelgames.sql.Application` - JVM参数:包含`-Xms2G -Xmx2G`内存设置和GC日志路径 2. **推荐终止步骤**: ```bash # 先尝试正常终止(发送SIGTERM信号) sudo kill 166922 # 等待5秒后检查是否终止 ps aux | grep 166922 # 如果仍然存在,强制终止(发送SIGKILL信号) sudo kill -9 166922 ``` 3. **注意事项**: - 使用`kill -9`会立即强制终止进程,可能导致数据丢失,建议先尝试普通`kill` - 观察`/data/devops/camel-web-sql/logs/`目录下的GC日志和HeapDump,可辅助排查OOM问题 - 该进程使用了CMS垃圾回收器(`-XX:+UseConcMarkSweepGC`),在JDK9+已废弃 4. **补充建议**: ```bash # 查找所有Java进程的更清晰方式 pgrep -af java # 如果需批量终止,可用pkill(谨慎使用) pkill -f camel-web-sql ``` 建议先执行普通kill命令,给JVM留出执行shutdown hook的时间,确保资源安全释放。如果应用有后台任务执行,建议通过应用的健康检查端点或管理接口优雅下线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值