通过 Jenkins 进行 Salt State 测试

通过 Jenkins 进行 Salt State 测试

全部,

我们正在尝试在 Jenkins 设置中进行自动化测试,以在我们的 salt state 文件 ( .sls) 中运行“smoke”和“lint”类型的测试。到目前为止,所有 google-foo 都只产生了很少的信息。有一种方法可以通过test=True命令行进行测试,但这不适用于无 shell 帐户(因为 Jenkin 的帐户通常是这样的)。

我还没有遇到过这样做的人自动化测试 SaltStack 状态。因此:

1)有可能吗

2)有谁知道有什么好的资源可以让我参考

短暂性脑缺血。

答案1

Docker。快速自动测试服务器配置是 docker 解决的现实问题,这是毋庸置疑的。它可以在一秒钟内提供一台已启动并正在监听网络的干净计算机。使用 /srv/salt bind-mounted 启动映像,然后您就可以运行salt-call --local state.highstate -l debug到测试状态而无需费心salt-key

我知道 SaltStack, Inc 以同样的方式使用 LXC。他们可能仍是如此。

至于测试 - 如果您很聪明并且细心地处理您的状态文件,那么您可以将干净的第二次运行视为成功的标志。

这很难实现,因为有些状态总是会重新运行。Salt Stack 擅长在发现这些状态时修复它们。与此同时,您必须用内联 jinja 条件包围这些状态,以便在运行时在 minion 上执行命令:

{% if salt['cmd.retcode']('your test here') %} 
some-identifier:
  some.module:
    - name: some anme
{% endif %}'

存在一个jenkins-docker 插件

docker 插件的目的是能够使用 docker 主机动态配置从属服务器、运行单个构建,然后拆除该从属服务器。

或者,您可以通过以下方式自动化整个过程新的 docker-ng salt 模块

salt dockhost docker-ng.create states-qa rm=True binds="/srv/salt:/srv/salt"
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 1
salt dockhost docker-ng.retcode states-qa 'salt-call --local state.highstate' # run 2
salt dockhost docker-ng.stop states-qa

答案2

你可能想看看测试基础设施

答案3

我一直在寻找一种在盐状态下实现这种 QA 的好方法,到目前为止我最好的答案是:

  1. 使用 jenkins 启动作业(通过 ssh),基于 dev git 分支:

    • 在我们的实验室 proxmox 私有云上配置一个 lxc(与我们在生产中执行的方式完全相同)

    • 使用盐反应器,容器获得其配置(就像在产品上一样)

    • 使用 testinfra 对构建和配置的容器运行单元测试

    • 最后,如果一切顺利,就销毁容器,如果不顺利,就让它继续活动,以便进行早上的调试:)

  2. 我们还运行了以下 linting jenkins 作业:

    for state in $(sudo /usr/bin/salt-call cp.list_states | awk '{print $2}' | grep -v "^top$"); do sudo /usr/bin/salt-call --retcode-passthrough state.show_sls ${state} ; done
    

我仍然无法获得这最后一个 linting 作业的正确返回代码(因为 ssh 等等)。

这一过程作为一个整体确保:

  1. 我们的配置过程正常
  2. 我们的代码库(状态 + 支柱)正在按预期运行
  3. 我们可以将开发和生产合并,并且具有很高的置信度

testinfra 的真正优点在于它可以使用 salt 连接后端,允许 testinfra 连接到容器而无需部署 ssh 密钥或其他任何东西(因为我们使用 salt-cloud 进行初始配置)

有关 testinfra 的更多信息salt 连接后端, 测试基础盐模块

虽然这并不完美,但仍然做得很好。

相关内容