如果 jenkins 和 jenkins-slave 的系列不匹配,我该如何部署它们?

如果 jenkins 和 jenkins-slave 的系列不匹配,我该如何部署它们?

注意:我通过 VMWare Fusion 在 OS X 笔记本电脑上的 3 个 Ubuntu 可信 VM 上运行此程序。

我是 juju 新手,在设置 jenkins-slave 时遇到了一些问题。我有一台 bootstrap 机器和另外两台机器。Jenkins(主)已成功安装在机器 1 上。当我尝试部署 jenkins-salve 时,我收到错误消息:

juju deploy -n 1 jenkins-slave
cannot assign unit "jenkins-slave/0" to new machine: use "juju add-machine ssh:[user@]<host>" to provision machines

我也尝试过:

juju remove-service jenkins-slave
juju deploy jenkins-slave --to 2
Added charm "cs:precise/jenkins-slave-7" to the environment.
ERROR cannot assign unit "jenkins-slave/0" to machine 2: series does not match

这没有意义,因为在尝试部署詹金斯之前,我添加了两台机器:

juju add-machine ssh:machine1
juju add-machine ssh:machine2

均已成功完成。以下是我的状态输出

juju status
environment: manual
machines:
"0":
agent-state: started
agent-version: 1.20.14
dns-name: thebat
instance-id: 'manual:'
series: trusty
hardware: arch=amd64 cpu-cores=1 mem=979M
state-server-member-status: has-vote
"1":
agent-state: started
agent-version: 1.20.14
dns-name: elemental
instance-id: manual:elemental
series: trusty
hardware: arch=amd64 cpu-cores=1 mem=979M
"2":
agent-state: started
agent-version: 1.20.14
dns-name: terrifying
instance-id: manual:terrifying
series: trusty
hardware: arch=amd64 cpu-cores=1 mem=979M
services:
jenkins:
charm: cs:trusty/jenkins-2
exposed: false
units:
  jenkins/0:
    agent-state: started
    agent-version: 1.20.14
    machine: "1"
    open-ports:
    - 8080/tcp
    public-address: elemental
jenkins-slave:
charm: cs:precise/jenkins-slave-7
exposed: false
units:
  jenkins-slave/0:
    agent-state: pending

答案1

答案很简单,但可能性很小。jenkins-slave 的 Charm 是一个精确 Charm,这意味着它可以仅有的安装在精确的 Ubuntu VM 上。

虽然这在使用 juju 一整天后才变得明显,但我认为这是此工具的一个主要问题。Chef/Puppet 等不依赖于风味,那么为什么 juju 依赖于风味版本。在我看来,这是严重缺乏规划。

答案2

您正在使用手动提供程序,这意味着您必须手动管理 Charm 系列并将其与设备上部署的系列进行匹配。如果您使用了,例如,本地提供商(文档提供了一个预定义的 Vagrant 映像,该映像已在 OS X 上测试过),Juju 会自动为您管理单位分配(包括系列),这样您就不会遇到此问题。

为 charm 定义的系列是该 charm 已在其上测试过且已知可以使用的 Ubuntu 版本。该 charm 完全有可能适用于较新的系列,并且在许多情况下,会为两个系列提交相同的 charm。(也有一些关于支持多系列 charm 的讨论,其中支持的系列在 charm 中定义metadata.yaml。)

如果你发现一个仅适用于特定系列的饰品,但你真的想要在不同的系列上运行它(但有一点需要注意,它可能无法正常运行),您可以随时将 Charm 从 Launchpad 分支到的本地目录结构中,<series>/<charm-name>并使用 进行部署juju deploy local:<series>/<charm-name>。(这与 Charm 作者用于使 Charm 支持新系列的过程相同。如果您这样做,并且能够使 Charm 正常工作,那么 Charm 维护者肯定会感谢您提交更改以允许 Charm 支持新系列。)

注意级数限制仅有的适用于部署该 charm 的机器。只要两个 charm 支持相同的接口,它们就可以关联并协同工作,即使它们运行在不同的系列上。

相关内容