systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?

Posted

技术标签:

【中文标题】systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?【英文标题】:Java executable jar location best practice for systemd and Jenkins CI? 【发布时间】:2018-10-03 19:13:12 【问题描述】:

我有 Spring Boot 2 可执行 jar(由命令 java -jar myapp.jar 运行),我需要将其作为 systemd 服务部署到远程 linux 服务器。 Jenkins CI 将管理从源代码构建这个 jar 并将其复制到适当的位置并重新启动与 myapp.jar 关联的 java 服务。除了 jenkins 用户之外,Linux 服务器只有一个具有 sudo 权限 的用户“jonas”。从生产环境中安全最佳实践的角度来看,我需要将myapp.jar 放在 linux 服务器的哪个位置?可能的位置:

 /var/myapplications/myapp.jar 
 /home/jona/myapplications/myapp.jar
 /opt//myapplications/myapp.jar

还有myapp.jar生成的日志文件会放在哪里?

【问题讨论】:

【参考方案1】:

根据我的经验,我建议将所有第三方和应用程序保留在/opt/ app_name

如果您喜欢以下结构,您可以关注该结构,该结构使新工件的部署更加容易,并且可以在需要时快速回滚。

/opt/ app_name /releases/ app_version

/opt/ app_name /current

/opt/ app_name /current/logs releases/ app_version 一部分的日志目录

您的部署脚本可以为此目的创建相应的文件夹、管理权限和符号链接。

我个人喜欢的是确保它在具有适当权限的非特权用户下运行,以确保只有特定用户可以递归地读取/执行/写入目录,其中包括可能包含一些敏感信息的日志被包含在例外中,但这完全取决于您的记录方式。

【讨论】:

Usman 的非特权用户是指非 root 用户吗?所以在我的情况下,乔纳斯是非特权用户?如果不需要,我是否需要创建另一个只能访问指定文件夹的用户 x,并且应用程序将作为该用户 x 运行?在这种情况下,我还需要以用户 x 身份登录才能查看日志文件?或者我可以以 jonas 身份登录并查看日志文件?如果只有非特权用户 x 可以访问应用程序,也不确定 jenkins 用户将如何部署和管理应用程序。谢谢 所以在这种情况下,用户 jonas 是一个非特权用户(非 root),我假设将用于运行应用程序,我建议创建一个名为 jonasapp 的组或者无论您想命名它,将jenkinsjonas 用户添加到该组,然后分别为组部分分配权限对于jonas 用户,如果应用程序从该用户运行,那么它将能够访问日志,对该组jonasapp的读取权限该组下的用户也可以读取日志jenkins用户可以添加到该组,因为显然它们似乎都在同一台主机上运行。

以上是关于systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

CI/CD之jenkins

CI/CD之jenkins

Jenkins vs GitLab CI:CI/CD工具之战

Apple CI / Xcode 服务和 Jenkins

CI/CD技术专题「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍

Jenkins实现Android项目CI和二维码下载