【问题标题】:Getting Jenkins CI to control SupervisorD让 Jenkins CI 控制 SupervisorD
【发布时间】: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 -csudo
  • 很有趣,我从没想过这一点,今天早上偶然发现了一个帖子,这让我跑了。所以当我看到这条评论时,我正要进来回答我自己的问题:-)

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


【解决方案1】:

就像往常一样,8 小时后,我设法回答了我自己的问题。

解决方案非常简单。

须藤

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

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

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

我在标记为用户权限规范的部分中的“根”条目下添加了我的行。

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

在您的发行版配置中添加此 sudo 条目后,您只需将构建后的步骤设置如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 2013-09-26
    • 1970-01-01
    • 2016-09-22
    • 2012-02-28
    • 2019-03-17
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多