【发布时间】:2020-03-06 06:48:00
【问题描述】:
所以在使用 CruiseControl.NET 完成持续集成任务多年后,我终于决定硬着头皮屈服于 JavaCI 的世界,即 Jenkins。
我已经设置了我的构建系统,它主要适用于最后一步,我的部署步骤,似乎我无法让它做我想做的事。
我正在尝试构建的内容
一个 dotnet 核心 Web 应用程序,由一个使用 Microsoft MVC 技术的 C# 后端和一个使用 Aurelia Web 应用程序框架用 TypeScript 编写的前端组成。
手动构建和部署此应用程序的步骤是
- dotnet 恢复
- npm 安装
- dotnet 构建
- dotnet 发布
- 服务主管停止(必须以 root 身份运行)
- rm -R /web/app/*(必须以 www-data 或 root 身份运行)
- cp -R /buildoutput /web/app(必须以 www-data 或 root 身份运行)
- 服务主管启动(必须以 root 身份运行)
构建系统在 64 位 Ubuntu 16.04 实例上运行,并且 jenkins 设置为每 5 分钟轮询一次包含源代码的 Git 存储库以检查更改。
到目前为止我得到了什么
直到“服务主管停止”条目的每件事都可以完美运行。无论我尝试什么,我都找不到一种合理的方法来执行根步骤。
这是我目前在 Jenkins 工作中所拥有的:
“DeployFromJenkins.sh”shell 脚本没有什么神奇之处,它只是包含以下内容:(实际服务器路径已被审查)
#!/bin/bash
/usr/sbin/service supervisor stop
rm -r /WEBAPPFOLDER/*
cp -R "/JENKINSBUILD/." /WEBAPPFOLDER/
/usr/sbin/service supervisor start
此版本失败是因为 Jenkins 以 Jenkins 身份运行,因此尝试以 jenkins 身份运行部署脚本,这意味着无法停止/启动服务。
我也尝试过其他方法,例如以 root 身份运行的小型 Web 应用程序,但我不知道如何使用信号量文件让 Jenkins 发送/接收 URL 请求,但我不知道如何让詹金斯读/写信号量文件。
刚开始使用 Jenkins,我想写一个插件,但我没有时间,而且我对 Jenkins 的了解还不够,无法正确使用它,更不用说学习它的 API。
那么现在我的问题...
什么是实现我需要实现的目标的最佳方式,我非常了解 Linux 和 Windows 系统的方式,所以不要担心提出疯狂的想法。
我想我真正需要做的就是解决部署步骤,其余的工作都很好,在这种情况下,人们可以提出什么建议来更好地完成部署步骤,是否有更好的插件,我可能不知道关于?
PS:我也不是真正的 supervisorD 专家,我被引导理解它可以做的比我目前使用的更多,它只是启动/停止和监控作业。
提前谢谢.....
【问题讨论】:
-
您是否尝试过在您的
DeployFromJenkins.sh脚本中使用su -c或sudo? -
很有趣,我从没想过这一点,今天早上偶然发现了一个帖子,这让我跑了。所以当我看到这条评论时,我正要进来回答我自己的问题:-)
标签: jenkins continuous-integration .net-core continuous-deployment supervisord