全部,
我们正在尝试在 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 的好方法,到目前为止我最好的答案是:
使用 jenkins 启动作业(通过 ssh),基于 dev git 分支:
在我们的实验室 proxmox 私有云上配置一个 lxc(与我们在生产中执行的方式完全相同)
使用盐反应器,容器获得其配置(就像在产品上一样)
使用 testinfra 对构建和配置的容器运行单元测试
最后,如果一切顺利,就销毁容器,如果不顺利,就让它继续活动,以便进行早上的调试:)
我们还运行了以下 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 等等)。
这一过程作为一个整体确保:
- 我们的配置过程正常
- 我们的代码库(状态 + 支柱)正在按预期运行
- 我们可以将开发和生产合并,并且具有很高的置信度
testinfra 的真正优点在于它可以使用 salt 连接后端,允许 testinfra 连接到容器而无需部署 ssh 密钥或其他任何东西(因为我们使用 salt-cloud 进行初始配置)
有关 testinfra 的更多信息salt 连接后端, 测试基础盐模块。
虽然这并不完美,但仍然做得很好。