Ansible can be used in many ways: most people likely execute their playbooks on their local machines. Then there is Ansible Automation Platform (AAP) (formerly Ansible Tower) and its small brother AWX. Both are the standard in larger organizations to allow for a more controlled way of running Ansible playbooks and offer RBAC capabilities. These two are also really “heavy” and require a lot of resources to run. Since some time both also require a Kubernetes backend.
These facts are not attractive for homelabs or other small-scale use cases. Luckily, Semaphore exists, which is a project aiming to provide a lightweight alternative to AAP. Maybe there are also even more alternatives, yet I was not able to find any others when researching the topic until today.
Crow CI is a Continuous Integration & Continuous Delivery (CI/CD)1 application.
It is designed to be lightweight, fast and extensible.
Features
- FLOSS License (Apache 2.0)
- 150 MB Memory requirement
- Container and Kubernetes backends
- Multi-forge support (GitHub, GitLab, Forgejo, Gitea, Bitbucket)
- SQLite, Postgres and MySQL support
- Flexible agent handling (Global, org, user)
- DAG pipeline visualization
- OAuth2 support
- Extension/Plugin system
- Integrated secret storage
- Maintenance panel
- HA-capable
Coming soon:
- Multi-forge Login support
- External secret store integration
Molecule project is designed to aid in the development and testing of Ansible roles.
Molecule provides support for testing with multiple instances, operating systems and distributions, virtualization providers, test frameworks and testing scenarios.
Molecule encourages an approach that results in consistently developed roles that are well-written, easily understood and maintained.
Molecule supports only the latest two major versions of Ansible (N/N-1), meaning that if the latest version is 2.9.x, we will also test our code with 2.8.x.
Once installed, the command line can be called using any of the methods below:
molecule ...
python3 -m molecule ... # python module calling method
This article describes one approach to setting up a GitLab CI/CD pipeline for testing and deploying Ansible content.
Zuul is a Project Gating System. That’s like a CI or CD system, but the focus is on testing the future state of code repositories.
A gating system doesn’t just test a proposed change; it tests the proposed future state of multiple branches and repositories with any number of in-flight changes and their dependencies. And the same playbooks used to test software can also be used to deploy it.
Zuul itself is a service which listens to events from various code review systems, executes jobs based on those events, and reports the results back to the code review system. The primary interface for Zuul is the code review system (or systems) so that it fits seamlessly into developer workflows, and a web interface is available for inspecting the current status and browsing build results.
The best way to run Zuul is with a single installation serving as many projects or groups as possible. It is a multi-tenant application that is able to provide as much or as little separation between projects as desired.
Molecule project is designed to aid in the development and testing of Ansible roles.
Molecule provides support for testing with multiple instances, operating systems and distributions, virtualization providers, test frameworks and testing scenarios.
Molecule encourages an approach that results in consistently developed roles that are well-written, easily understood and maintained.
Molecule supports only the latest two major versions of Ansible (N/N-1), meaning that if the latest version is 2.9.x, we will also test our code with 2.8.x.
Once installed, the command line can be called using any of the methods below:
molecule
Flux is a tool that automatically ensures that the state of a cluster matches the config in git. It uses an operator in the cluster to trigger deployments inside Kubernetes, which means you don't need a separate CD tool. It monitors all relevant image repositories, detects new images, triggers deployments and updates the desired running configuration based on that (and a configurable policy).
The benefits are: you don't need to grant your CI access to the cluster, every change is atomic and transactional, git has your audit log. Each transaction either fails or succeeds cleanly. You're entirely code centric and don't need new infrastructure.
Automate Software Testing and Delivery
Drone is a self-service Continuous Delivery platform for busy development teams.
Ansible Runner is a tool and python library that helps when interfacing with Ansible directly or as part of another system whether that be through a container image interface, as a standalone tool, or as a Python module that can be imported. The goal is to provide a stable and consistent interface abstraction to Ansible. This allows Ansible to be embedded into other systems that don’t want to manage the complexities of the interface on their own (such as CI/CD platforms, Jenkins, or other automated tooling).
ksonnet is a framework for writing, sharing, and deploying Kubernetes application manifests. With its CLI, you can generate a complete application from scratch in only a few commands, or manage a complex system at scale.
Specifically, ksonnet allows you to:
Reuse common manifest patterns (within your app or from external libraries)
Customize manifests directly with powerful object concatenation syntax
Deploy app manifests to multiple environments
Diff across environments to compare two running versions of your app
Track the entire state of your app configuration in version controllable files
All of this results in a more iterative process for developing manifests, one that can be supplemented by continuous integration (CI).
GitLab has integrated CI/CD pipelines to build, test, deploy, and monitor your code.
The benefits of Continuous Integration are huge when automation plays an integral part of your workflow. GitLab comes with built-in Continuous Integration, Continuous Deployment, and Continuous Delivery support to build, test, and deploy your application.
Deploy based on the planet alignments.