让Jenkins CI控制SupervisorD

时间:2017-08-07 20:39:33

标签: jenkins continuous-integration .net-core continuous-deployment supervisord

因此,经过多年使用CruiseControl.NET进行持续集成任务,我终于决定咬紧牙关,屈服于JavaCI的世界,即Jenkins。

我已经设置了我的构建系统,并且它的最后一步是接受,我的部署步骤,似乎我无法让它做我想要的。

我正在尝试构建

一个dotnet核心Web应用程序,由使用Microsoft MVC技术的C#后端和使用Aurelia Web应用程序框架以TypeScript编写的前端组成。

手动构建和部署此应用程序的步骤是

  • dotnet restore
  • npm install
  • dotnet build
  • dotnet publish
  • 服务主管停止(必须以root身份运行)
  • rm -R / web / app / *(必须以www-data或root身份运行)
  • cp -R / buildoutput / web / app(必须以www-data或root身份运行)
  • 服务主管启动(必须以root身份运行)

构建系统在64位Ubuntu 16.04实例上运行,jenkins设置为轮询Git Repositiory每5分钟保存一次源代码以检查更改。

到目前为止我得到了什么

“服务主管停止”进入的每一件事都完美无缺。无论我尝试什么,我找不到一个理智的方法来获得执行的根步骤。

到目前为止,这就是我在Jenkins工作中所拥有的:

Current Jenkins Project

“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身份运行的小型网络应用程序,但我无法弄清楚如何使用信号量文件让Jenkins发送/接收URL请求,但我无法弄清楚如何使jenkins读/写信号量文件。

刚开始使用Jenkins时,我会花一点时间来编写插件,但是我没有时间,而且我还不知道Jenkins是否能够正确使用它,更不用说学习它的API了。

现在问我的问题......

什么是最好的实现我需要实现的目标,我非常了解Linux和Windows系统,所以不要担心提出疯狂的想法。

我认为我实际需要做的就是解决部署步骤,其余的工作完全正常,在这种情况下,人们可以做些什么建议来更好地进行部署步骤,是否有一个更好的插件,我可能不知道大约?

PS:我也不是真正的主管专家,我知道它可以比我目前使用的更多,只是为了启动/停止和监控工作。

提前致谢.....

1 个答案:

答案 0 :(得分:1)

总是好像发生了,8小时后,我已经设法回答了我自己的问题。

解决方案非常简单。

<强>须藤

基本上,您需要使用发行版工具将以下行添加到您的sudoers文件中:

jenkins ALL = NOPASSWD: /path/to/yourscript.sh

在ubuntu上,这是通过将 visudo 用作sudo或root帐户来完成的。

我在标有用户权限规范的部分的“root”条目下添加了我的行。

这一行基本上说的是,如果命名脚本由用户jenkins运行,并且前面有sudo,则可以使用完全权限运行而无需密码。

在您的发行版配置中添加了这个sudo条目后,您只需按照以下步骤设置帖子构建步骤:

Updated post build step using sudo

使用这种技术,我现在可以使用各种shell脚本进行大量自动化。