让 Jenkins CI 控制 SupervisorD
Getting Jenkins CI to control SupervisorD
因此,在我的持续集成任务中使用 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)
构建系统 运行ning 在 64 位 Ubuntu 16.04 实例上,jenkins 设置为每 5 分钟轮询一次保存源代码的 Git 存储库以进行检查进行更改。
到目前为止我得到了什么
"service supervisor stop" 条目之前的所有内容都完美无缺。无论我尝试什么,我都找不到一个理智的方法来执行根步骤。
这是我目前在 Jenkins Job 中的内容:
"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,这意味着没有 stopping/starting 服务。
我也尝试过其他方法,例如以 root 用户身份 运行 小型网络应用程序,但我不知道如何发出 Jenkins send/receive URL 请求,使用信号量文件,但我不知道如何制作 jenkins read/write 信号量文件。
刚开始使用 Jenkins,我很想写一个插件,但我没有时间,而且我对 Jenkins 的了解还不足以正确使用它,更不用说学习它了API.
那么现在回答我的问题...
实现我需要实现的目标的最佳方法是什么,我非常了解 Linux 和 Windows 系统,所以不要担心提出疯狂的想法。
我想我真正需要做的就是解决部署步骤,其余的工作非常好,在这种情况下,人们可以提出什么建议来更好地完成部署步骤,有没有更好的插件我可能没有'不知道吗?
PS:我也不是真正的 supervisorD 专家,我了解到它可以做的比我目前使用的更多,这只是 start/stop 和监控职位。
提前致谢......
就像往常一样,8 小时后,我设法回答了我自己的问题。
解决方法非常简单。
sudo
基本上,您需要使用发行版工具将以下行添加到您的 sudoers 文件中:
jenkins ALL = NOPASSWD: /path/to/yourscript.sh
在 ubuntu 上,这是通过使用 visudo 作为 sudo 或从根帐户来完成的。
我在标记为用户权限规范的部分的 "root" 条目下添加了我的行。
这一行实质上说的是,如果命名脚本是用户 jenkins 的 运行,前面有 sudo,它会以完全权限进入 运行,不需要密码。
在您的发行版配置中添加此 sudo 条目后,您只需按如下方式设置 post 构建步骤:
使用这种技术,我现在只需使用各种 shell 脚本就可以实现大量自动化。
因此,在我的持续集成任务中使用 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)
构建系统 运行ning 在 64 位 Ubuntu 16.04 实例上,jenkins 设置为每 5 分钟轮询一次保存源代码的 Git 存储库以进行检查进行更改。
到目前为止我得到了什么
"service supervisor stop" 条目之前的所有内容都完美无缺。无论我尝试什么,我都找不到一个理智的方法来执行根步骤。
这是我目前在 Jenkins Job 中的内容:
"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,这意味着没有 stopping/starting 服务。
我也尝试过其他方法,例如以 root 用户身份 运行 小型网络应用程序,但我不知道如何发出 Jenkins send/receive URL 请求,使用信号量文件,但我不知道如何制作 jenkins read/write 信号量文件。
刚开始使用 Jenkins,我很想写一个插件,但我没有时间,而且我对 Jenkins 的了解还不足以正确使用它,更不用说学习它了API.
那么现在回答我的问题...
实现我需要实现的目标的最佳方法是什么,我非常了解 Linux 和 Windows 系统,所以不要担心提出疯狂的想法。
我想我真正需要做的就是解决部署步骤,其余的工作非常好,在这种情况下,人们可以提出什么建议来更好地完成部署步骤,有没有更好的插件我可能没有'不知道吗?
PS:我也不是真正的 supervisorD 专家,我了解到它可以做的比我目前使用的更多,这只是 start/stop 和监控职位。
提前致谢......
就像往常一样,8 小时后,我设法回答了我自己的问题。
解决方法非常简单。
sudo
基本上,您需要使用发行版工具将以下行添加到您的 sudoers 文件中:
jenkins ALL = NOPASSWD: /path/to/yourscript.sh
在 ubuntu 上,这是通过使用 visudo 作为 sudo 或从根帐户来完成的。
我在标记为用户权限规范的部分的 "root" 条目下添加了我的行。
这一行实质上说的是,如果命名脚本是用户 jenkins 的 运行,前面有 sudo,它会以完全权限进入 运行,不需要密码。
在您的发行版配置中添加此 sudo 条目后,您只需按如下方式设置 post 构建步骤:
使用这种技术,我现在只需使用各种 shell 脚本就可以实现大量自动化。