我有一个 jenkins ubuntu 服务器和几个在 ec2 上运行的 windows 节点。我希望服务器可以根据需要打开和关闭 windows 框。我思考这意味着在节点配置中使用“启动方法”,但我不确定该写什么。
我目前已将启动方法设置为“通过将其连接到主服务器”,并且必须在管道开始时调用一个步骤来aws ec2 start-instances --instance-ids XXX
启动实例,并在完成管道时执行等效的停止实例,但这意味着每个作业都会打开和关闭机器,即使有另一个作业排队。
我或许可以将 aws 命令放入节点配置中,但我只有一个命令框。我无法输入一个命令来关闭它,再输入另一个命令来打开它。
这里有插件可以帮忙吗?或者有办法设置 aws 调用来使其工作?我是否正确认为启动方法是我想要的框?
答案1
继我之前的回答之后关于基本节点配置选项,也许从属设置插件提供了进一步的可管理性。
有一个“启动前脚本”选项,
“可用于在 Jenkins 尝试 ssh 连接之前启动从属机器。”
插件还提供了“按需从属设置”:此插件还为您提供了针对按需从属的每个从属的“启动”和“停止”脚本配置。这可能正好符合您的需求。
安装后,您将获得针对此情况的附加“启动方法”(1):
该脚本允许您指定“启动”(2) 和“停止”(3) 脚本,最重要的是,您将能够指定启动后用于连接从属设备的“常规”连接 (4) 方法。
您可能还想指定仅当 Jenkins 需要时该节点才在线(5)。
下图显示了如果您的按需从属服务器是 Amazon EC2 实例,您可能需要使用的配置。
答案2
我不使用 AWS / ec2,但是...此答案是为了解释节点的一些选项并在此基础上构建而提供的随后接受的答案,通常没有很好的记录;请不要投反对票
您是否查看过节点配置页面中的选项:
${JENKINS_URL}/computer/<NODE>/configure
默认可用性是“尽可能保持此代理在线”
其他选项包括“有需求时让座席上线,空闲时让座席下线”。除非您有办法停止/启动虚拟机,否则此选项实际上没有多大意义,因为它只会停止代理服务,而不会停止虚拟机;不清楚这在什么时候比保持在线更有用。
有一个“按需延迟”(在 Jenkins 尝试将此代理上线之前,作业必须在队列中等待的分钟数)和一个空闲延迟(在 Jenkins 将其下线之前,此代理必须保持空闲的分钟数)。即使 0 分钟也需要一点时间来决定启动或停止。
我还会调整“用法”到 ”仅构建与此节点匹配的标签表达式的作业”,用通用标签(ec2?)标记节点,然后将特定阶段绑定到相应的标签,以便更好地控制使用情况。
如果这不能满足你的需求,还有EC2 插件和AWS 针对 Jenkins 成本优化提供的指导。
还有插件AWS Lambda 云和AWS CodeBuild 云代理如果你感兴趣的话。