因此,经过多年使用CruiseControl.NET进行持续集成任务,我终于决定咬紧牙关,屈服于JavaCI的世界,即Jenkins。
我已经设置了我的构建系统,并且它的最后一步是接受,我的部署步骤,似乎我无法让它做我想要的。
一个dotnet核心Web应用程序,由使用Microsoft MVC技术的C#后端和使用Aurelia Web应用程序框架以TypeScript编写的前端组成。
手动构建和部署此应用程序的步骤是
构建系统在64位Ubuntu 16.04实例上运行,jenkins设置为轮询Git Repositiory每5分钟保存一次源代码以检查更改。
“服务主管停止”进入的每一件事都完美无缺。无论我尝试什么,我找不到一个理智的方法来获得执行的根步骤。
到目前为止,这就是我在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身份运行的小型网络应用程序,但我无法弄清楚如何使用信号量文件让Jenkins发送/接收URL请求,但我无法弄清楚如何使jenkins读/写信号量文件。刚开始使用Jenkins时,我会花一点时间来编写插件,但是我没有时间,而且我还不知道Jenkins是否能够正确使用它,更不用说学习它的API了。
什么是最好的实现我需要实现的目标,我非常了解Linux和Windows系统,所以不要担心提出疯狂的想法。
我认为我实际需要做的就是解决部署步骤,其余的工作完全正常,在这种情况下,人们可以做些什么建议来更好地进行部署步骤,是否有一个更好的插件,我可能不知道大约?
PS:我也不是真正的主管专家,我知道它可以比我目前使用的更多,只是为了启动/停止和监控工作。
提前致谢.....
答案 0 :(得分:1)
总是好像发生了,8小时后,我已经设法回答了我自己的问题。
解决方案非常简单。
<强>须藤强>
基本上,您需要使用发行版工具将以下行添加到您的sudoers文件中:
jenkins ALL = NOPASSWD: /path/to/yourscript.sh
在ubuntu上,这是通过将 visudo 用作sudo或root帐户来完成的。
我在标有用户权限规范的部分的“root”条目下添加了我的行。
这一行基本上说的是,如果命名脚本由用户jenkins运行,并且前面有sudo,则可以使用完全权限运行而无需密码。
在您的发行版配置中添加了这个sudo条目后,您只需按照以下步骤设置帖子构建步骤:
使用这种技术,我现在可以使用各种shell脚本进行大量自动化。