Skip to content

An excerpt of an ALM environment built on top of Vagrant, Libvirt and Ansible

License

Notifications You must be signed in to change notification settings

thomas-ferchau/vagrant-alm

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vagrant ALM - Application Lifecycle Management for labs and tests

This project aims to build a ALM infrastructure within a virtual environment using Vagrant and provisioning with Ansible.

The picture bellow illustrates the infrastructure defined in the Vagrant file:

Vagrant ALM infrastructure

The process could be summarized as follows:

  1. The main point of interest in this scenario is Jenkins doing his job which is orchestrating a CI/CD process.

  2. Next we send the code to be analised by Sonar Source for find some buggy code and to check how good our tests are.

  3. For artifact archiving we use Nexus v.3 so our binaries could reside there for later deploy.

  4. And finally, a simple machine waiting to receive the binaries and be provisioned by Jenkins using the Ansible Plugin.

I've managed to build a simple lab using this sample workflow that could be found in here. Also, if you are interested, there's a presentation that I did on Ansible Meetup in São Paulo describing this scenario. Enjoy!

Quick Start

  • Tested on Windows 10 20H2

  • Install VirtualBox and Vagrant

  • Use a direct Internet connection before proceeding (stop VPN / connect to "blue" cable for direct Internet access / disconnect from company WiFi and Network if that needs a proxy configuration)

  • Create, start, and provision VMs:

    cd jenkins-ansible-vagrant
    vagrant up
    

    This will ask for the Administrator password (maybe even multiple times).

    Vagrant starts the VirtualBox VMs. On the first start it calls Ansible to install and configure the tools/services in the VMs.

    • Workaround for Unable to start service sonarqube:
      vagrant ssh sonar
      
      # In the sonar VM:
      sudo chown -R sonar:sonar /opt/sonarqube/
      
      # Back on the host:
      vagrant provision
      
  • Re-run provisioning (in case of errors or subsequent changes):

    cd jenkins-ansible-vagrant
    vagrant rsync
    vagrant provision
    

    Only re-run provisioning on ansiblehost (runs Ansible to provision the other hosts):

    cd jenkins-ansible-vagrant
    vagrant rsync ansiblehost
    vagrant provision ansiblehost
    

    Run Ansible provisioning for only one host type (replace jenkins_server with the required host, add -vvv for debug outputs):

    cd jenkins-ansible-vagrant
    vagrant rsync ansiblehost
    vagrant ssh ansiblehost
    # In the ansiblehost VM:
    PYTHONUNBUFFERED=1 ANSIBLE_ROLES_PATH='/home/vagrant/ansible-downloads/roles' \
        ansible-playbook \
            --inventory-file=/vagrant/ansible/inventory.ini \
            /vagrant/ansible/alm.yml \
            --limit="jenkins_server"
    

    For speedup, comment-out parts of alm.yml, e.g. Update apt and Install requirements.

  • SSH Login to VMs, e.g. jenkins:

    vagrant ssh jenkins
    
  • Optional: Stop ansiblehost to save RAM on the Host (that host is only required for provisioning):

    vagrant halt ansiblehost
    
  • Open CI Tools in Browser

  • Manual configuration steps

    • Jenkins:
      • Manage Jenkins -> Global Tool Configuration -> Maven -> Maven installations

        Install automatically: Uncheck

        Name: M3

        MAVEN_HOME: /opt/apache-maven-3.5.4

        Save

  • Example project: soccer-stats

  • Stop all VMs of this project:

    vagrant halt
    
  • Delete all VMs of this project:

    vagrant destroy
    

How to use

Just install Vagrant on your unix machine and you are ready to go. I've tried to keep the Vagrantfile as much agnostic as possible to be simple to reproduce on any Vagrant environment. Even if you couldn't manage to work, I hope this file could help you at least as a reference. Also install the Vagrant Networkmanager plugin to have your hosts file configured accordingly: vagrant plugin install vagrant-hostmanager.

Remember that the Ansible playbooks on this repo are the real project rock star. It's responsible to give the environment everything you need to build your ALM.

Don't forget to install the Ansible Roles from the repository by executing the following command from the project's root dir:

ansible-galaxy install -r requirements.yml

Jenkins configuration post install

After your Jenkins server got provisioned, you will need to set:

  1. Ansible Tower Global Credentials: a. Username: your username b. Password: your pass c. ID: tower

  2. Ansible Tower Installation: a. Name: tower b. URL: https://tower.local c. Credenctials: the same that was set in the last step d. Force Trust Cert: true

  3. Maven in Global Tool Configuration: a. Name: M3 b. MAVEN_HOME: /opt/apache-maven-3.5.4

Ansible Tower

To provision Ansible Tower you have to first install VirtualBox and then execute: vagrat up tower --provider virtualbox. A brand new machine with Ansible Tower will be provisioned for you. After installation, go to http://tower.local and set your trial license and you're a set!

Notes

The original ansible role geerlingguy.sonar doesn't work with Postgres. I've already sent a pull request to the original author but until now, he haven't have the time to merge. In the future I have plans to aniquilate the zanini.sonar role from the local dir and rely only on the Geerling Guy's role.

There's an issue on Vagrant 1.9.1 that is very annoying: the eth01 needs a restart after bring the machine up. Do the following after sshing at the machine:

sudo /etc/init.d/network restart

Credits

About

An excerpt of an ALM environment built on top of Vagrant, Libvirt and Ansible

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jinja 100.0%