从 Jenkins 作业执行时如何使用 Ansible 报告分析 (ARA)

Posted

技术标签:

【中文标题】从 Jenkins 作业执行时如何使用 Ansible 报告分析 (ARA)【英文标题】:How to Use Ansible Report Analysis (ARA) while executing from a Jenkins Job 【发布时间】:2018-03-13 02:31:30 【问题描述】:

当我通过命令行运行相同的作业时,只需按照以下步骤即可生成报告:

% sudo su jenkins
% export ANSIBLE_CALLBACK_PLUGINS="/usr/lib/python2.7/site-packages/ara/plugins/callbacks"
% /bin/ansible-playbook -v -i /etc/ansible/my-inventory ./test-job.yaml`

但是,在通过 Jenkins 执行相同作业时,我在生成 ARA 报告时遇到了一些问题。我做了以下事情:

    在 $JENKINS_HOME/.bashrc 中:

    导出 ANSIBLE_CALLBACK_PLUGINS="/usr/lib/python2.7/site-packages/ara/plugins/callbacks" `

    通过以下方式定义环境变量:Jenkins UI -> 管理 Jenkins -> 配置系统:

    名称:ANSIBLE_CALLBACK_PLUGINS 值:/usr/lib/python2.7/site-packages/ara/plugins/callbacks

    在我的 Ansible Job -> Execute shell 中,我指定了以下内容:

    导出 ANSIBLE_CALLBACK_PLUGINS="/usr/lib/python2.7/site-packages/ara/plugins/callbacks"

    /bin/ansible-playbook -v -i /etc/ansible/my-inventory ./test-job.yaml

这是.ansible.cfg的内容:

[default]
# the following lines added for ara callback_plugins configuration is required for the ARA callback
callback_plugins = /usr/lib/python2.7/site-packages/ara/plugins/callbacks

# action_plugins and library configuration is required for the ara_record and ara_read modules
action_plugins = /usr/lib/python2.7/site-packages/ara/plugins/actions
library = /usr/lib/python2.7/site-packages/ara/plugins/modules

[ara]
ARA_HOST = 0.0.0.0
ARA_PORT = 8443

【问题讨论】:

【参考方案1】:

使用 Jenkins 运行 ARA 有多种方式。

回调将数据发送到数据库,Web 应用程序从该数据库中读取数据。

默认情况下,此数据库位于~/.ara/ansible.sqlite。 例如,如果您从 jenkins 用户执行 ansible-playbook 命令,则这可能是 /var/lib/jenkins/.ara/ansible.sqlite

理想情况下,您希望每个作业拥有一个数据库和一份报告,以便所有内容都是独立的——它现在比一个大型单体数据库更好地扩展。

您可以通过执行this 之类的操作来自定义数据库的位置:

export ARA_DATABASE="sqlite:///$WORKSPACE/$JOB_NAME.sqlite"

所有数据都在该数据库中自包含。 如果您愿意,可以下载并在本地浏览。

您还可以生成static html report。 虽然我们不使用 Jenkins,但这正是我们在 OpenStack 社区中所做的。对于任何 CI 作业,我们都会将日志上传到带有附加“ara”报告目录的服务器:

支持的前进方式很可能是围绕 WSGI 中间件实现的,以允许您加载自动扩展更好的“任意”数据库。您可以在此处阅读有关此内容的更多信息: https://ara.readthedocs.io/en/latest/advanced.html#serving-ara-sqlite-databases-over-http

如果您想在 Jenkins 服务器上运行 Web 应用程序,您也可以这样做。唯一要记住的是您的回调和您的 Web 应用程序都可以访问数据库。您可以使用ara-manage runserver 命令轻松试用嵌入式 Web 服务器。

希望这会有所帮助!

【讨论】:

【参考方案2】:

当我今天早上刷新浏览器时,我能够看到我在夜间执行的所有作业的报告。这些夜间作业没有设置上述环境变量(第 3 项)。

export ANSIBLE_CALLBACK_PLUGINS="/usr/lib/python2.7/site-packages/ara/plugins/callbacks"

所以看起来通过遵循上面的第 1 和第 2 项,我能够通过 Jenkins 作业运行 ansible 任务并查看来自 ARA 的报告。

【讨论】:

以上是关于从 Jenkins 作业执行时如何使用 Ansible 报告分析 (ARA)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Jenkins作业执行中包含域用户

当 jenkins 作业作为“执行 Maven 发布”运行时,如何在 shell 步骤中获取参数 MVN_RELEASE_VERSION 的值?

如何使用服务挂钩从VSTS触发内部部署jenkins作业

如何从 jenkins 作业的 scm 轮询中排除 jenkins 文件

Jenkins 非特权用户如何从工作区下载文件?

如何配置 Jenkins 作业以将文件从 git 复制到服务器