Name : cronie Arch : x86_64 Version : 1.4.11 Release : 23.el7 Size : 215 k Repo : installed From repo : base Summary : Cron daemon for executing programs at set times URL : https://github.com/cronie-crond/cronie License : MIT and BSD and ISC and GPLv2+ Description : Cronie contains the standard UNIX daemon crond that runs specified programs at : scheduled times and related tools. It is a fork of the original vixie-cron and : has security and configuration enhancements like the ability to use pam and : SELinux.
直接基于 CentOS7 编写 Dockerfile
1 2 3 4 5
FROM centos:7 RUN groupadd --gid 1000 foo &&\ useradd --uid 1000 --gid foo foo RUN yum install cronie -y CMD ["crond","-n","-x","misc,load","-i"]
如果这个 role 够通用,我会把 role 放到 Github 并且提交到 Ansible Galaxy 里,又或者放到一个单独的私有 Git 仓库里。现在我可以通过 Molecule 或者其它测试工具为 role 添加一系列的通用测试,哪怕这些 role 被隶属不同的团队的不同项目所使用。
之后我会通过 requirements.txt 文件把外部的 role 引入到项目里。对于某些稳定性至关重要的项目,我会通过 git ref 或者 tag 指定 role 的版本。对于其它项目我则会牺牲一点稳定性以换取更好的可维护性(例如测试 playbook 或者一次性的服务器配置),我直接使用 role 的名字(如果不在 Ansible Galaxy 上就指定仓库的详情)。
对于大部分项目我都不会把外部 role 提交到代码仓库里,因为在 CI 系统里每次从头运行的时候都会去安装。但是在有一些情况下,最好把所有的 role 都提交到仓库里。比如有一些开发者日常会用到我写的 Drupal 虚拟机的 playbook,这些开发者通常住在离 Ansible Galaxy 服务器很远的地方,所以他们在安装大量必要依赖的时候会遇到麻烦。因此我把所有 role 都提交到仓库里了,这样他们在构建一个新的 Drupal 虚拟机实例的时候就不用等着所有 role 安装完成了。
如果你真的把 role 都提交到仓库里了,你需要在每次更新 role 的时候有一个彻底(thorough)的流程,确保你的 requirements.yml 文件和已经安装的 role 同步!我通常通过 ansible-galaxy install -r requirements.yml --force 命令来强制替换仓库里的 role,并且保持诚实(踏实?)!
把这个 task 改成基于 synchronize 的可以在每次运行的时候节省好长时间。针对单次运行这看起来没什么,但是当 playbook 需要定期运行的时候(例如确保一台服务器的配置),或者作为 CI 流程的一部分的时候保持它的高效就很重要了。否则它会让 CPU 周期耗费在一些无用代码上,开发者通常会很讨厌等待 CI 测试通过,他们只想知道代码会不会导致问题。