Merge pull request #13477 from chrismeyersfsu/jenkins-playbooks
Jenkins playbooks
This commit is contained in:
commit
5fa93ef8fc
18 changed files with 314 additions and 0 deletions
|
@ -55,3 +55,4 @@ Ansible was created by [Michael DeHaan](https://github.com/mpdehaan) (michael.de
|
|||
|
||||
Ansible is sponsored by [Ansible, Inc](http://ansible.com)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[defaults]
|
||||
host_key_checking = False
|
41
test/utils/ansible-playbook_integration_runner/ec2.yml
Normal file
41
test/utils/ansible-playbook_integration_runner/ec2.yml
Normal file
|
@ -0,0 +1,41 @@
|
|||
- name: Launch Instance
|
||||
ec2:
|
||||
group_id: 'sg-07bb906d' # jenkins-slave_new
|
||||
count: 1
|
||||
instance_type: 'm3.medium'
|
||||
image: '{{ item.image }}'
|
||||
wait: true
|
||||
region: 'us-east-1'
|
||||
keypair: '{{ keypair }}'
|
||||
aws_access_key: "{{ aws_access_key|default(lookup('env', 'AWS_ACCESS_KEY')) }}"
|
||||
aws_secret_key: "{{ aws_secret_key|default(lookup('env', 'AWS_SECRET_KEY')) }}"
|
||||
instance_tags:
|
||||
jenkins: jenkins_ansible_pr_test
|
||||
register: ec2
|
||||
with_items: slaves
|
||||
# We could do an async here, that would speed things up
|
||||
|
||||
|
||||
- name: Wait for SSH
|
||||
wait_for:
|
||||
host: "{{ item['instances'][0]['public_ip'] }}"
|
||||
port: 22
|
||||
delay: 10
|
||||
timeout: 320
|
||||
state: started
|
||||
with_items: ec2.results
|
||||
|
||||
- name: Wait a little longer for centos
|
||||
pause: seconds=20
|
||||
|
||||
- name: Add hosts group temporary inventory group with pem path
|
||||
add_host:
|
||||
name: "{{ item.1.platform }} {{ ec2.results[item.0]['instances'][0]['public_ip'] }}"
|
||||
groups: dynamic_hosts
|
||||
ansible_ssh_host: "{{ ec2.results[item.0]['instances'][0]['public_ip'] }}"
|
||||
ansible_ssh_private_key_file: '{{ pem_path }}'
|
||||
ansible_ssh_user: "{{ item.1.ssh_user }}"
|
||||
ec2_vars: "{{ ec2.results[item.0]['instances'][0] }}"
|
||||
ec2_instance_ids: "{{ ec2.results[item.0]['instance_ids'] }}"
|
||||
with_indexed_items: slaves
|
||||
|
1
test/utils/ansible-playbook_integration_runner/inventory
Normal file
1
test/utils/ansible-playbook_integration_runner/inventory
Normal file
|
@ -0,0 +1 @@
|
|||
localhost ansible_connection=local
|
62
test/utils/ansible-playbook_integration_runner/main.yml
Normal file
62
test/utils/ansible-playbook_integration_runner/main.yml
Normal file
|
@ -0,0 +1,62 @@
|
|||
- hosts: all
|
||||
connection: local
|
||||
vars:
|
||||
slaves:
|
||||
- distribution: "Ubuntu"
|
||||
version: "12.04"
|
||||
image: "ami-2ccc7a44"
|
||||
ssh_user: "ubuntu"
|
||||
platform: "ubuntu-12.04-x86_64"
|
||||
- distribution: "Ubuntu"
|
||||
version: "14.04"
|
||||
image: "ami-9a562df2"
|
||||
ssh_user: "ubuntu"
|
||||
platform: "ubuntu-14.04-x86_64"
|
||||
- distribution: "CentOS"
|
||||
version: "6.5"
|
||||
image: "ami-8997afe0"
|
||||
ssh_user: "root"
|
||||
platform: "centos-6.5-x86_64"
|
||||
- distribution: "CentOS"
|
||||
version: "7"
|
||||
image: "ami-96a818fe"
|
||||
ssh_user: "centos"
|
||||
platform: "centos-7-x86_64"
|
||||
|
||||
tasks:
|
||||
- debug: var=ansible_version
|
||||
- include: ec2.yml
|
||||
when: groups['dynamic_hosts'] is not defined
|
||||
|
||||
- hosts: dynamic_hosts
|
||||
sudo: true
|
||||
vars:
|
||||
credentials_file: ''
|
||||
test_flags: ""
|
||||
make_target: "non_destructive"
|
||||
#pre_tasks:
|
||||
roles:
|
||||
- { role: ansible_test_deps, tags: ansible_test_deps }
|
||||
- { role: run_integration,
|
||||
tags: run_integration,
|
||||
run_integration_test_flags: "{{ test_flags }}",
|
||||
run_integration_credentials_file: "{{ credentials_file }}",
|
||||
run_integration_make_target: "{{ make_target }}", }
|
||||
tasks:
|
||||
|
||||
- name: Kill ec2 instances
|
||||
sudo: false
|
||||
local_action:
|
||||
module: ec2
|
||||
state: absent
|
||||
region: 'us-east-1'
|
||||
instance_ids: "{{ hostvars[item]['ec2_instance_ids'] }}"
|
||||
when: hostvars[item]['ec2_instance_ids'] is defined and item == inventory_hostname
|
||||
with_items: groups['dynamic_hosts']
|
||||
|
||||
- set_fact:
|
||||
ansible_connection: local
|
||||
|
||||
- name: Fail
|
||||
shell: 'echo "{{ inventory_hostname }}, Failed" && exit 1'
|
||||
when: "test_results.rc != 0"
|
|
@ -0,0 +1,37 @@
|
|||
sudo: required
|
||||
dist: trusty
|
||||
language: python
|
||||
python:
|
||||
- "2.7"
|
||||
services:
|
||||
- docker
|
||||
env:
|
||||
global:
|
||||
- PATH="/usr/bin:$PATH"
|
||||
|
||||
before_install:
|
||||
# Ansible doesn't play well with virtualenv
|
||||
- deactivate
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install docker-engine
|
||||
|
||||
install:
|
||||
- sudo pip install docker-py
|
||||
# software-properties-common for ubuntu 14.04
|
||||
# python-software-properties for ubuntu 12.04
|
||||
- sudo apt-get install -y sshpass software-properties-common python-software-properties
|
||||
- sudo apt-add-repository -y ppa:ansible/ansible
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -y ansible
|
||||
- sudo rm /usr/bin/python && sudo ln -s /usr/bin/python2.7 /usr/bin/python
|
||||
- ansible-galaxy install -r test/requirements.yml -p test/roles/
|
||||
|
||||
script:
|
||||
# Ensure any invocation of ansible-playbook (i.e. sudo) results in host_key_checking disabled
|
||||
- sudo ansible all -i "127.0.0.1," -m lineinfile -a "regexp=^#host_key_checking dest=/etc/ansible/ansible.cfg line='host_key_checking = False'" -c local
|
||||
- ansible-playbook -i test/inventory test/main.yml --syntax-check
|
||||
- sudo ansible-playbook -i test/inventory test/main.yml
|
||||
|
||||
notifications:
|
||||
# notify ansible galaxy of results
|
||||
webhooks: http://goo.gl/nSuq9h
|
|
@ -0,0 +1,6 @@
|
|||
[![Build Status](https://travis-ci.org/chrismeyersfsu/ansible_test_deps.svg)](https://travis-ci.org/chrismeyersfsu/ansible_test_deps)
|
||||
|
||||
ansible_test_deps
|
||||
=========
|
||||
|
||||
Install needed packages to run ansible integration tests.
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
# defaults file for .
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
# handlers file for .
|
|
@ -0,0 +1 @@
|
|||
{install_date: 'Tue Dec 8 15:06:28 2015', version: master}
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
galaxy_info:
|
||||
author: Chris Meyers
|
||||
description: install ansible integration test dependencies
|
||||
company: Ansible
|
||||
license: license (GPLv2, CC-BY, etc)
|
||||
min_ansible_version: 1.2
|
||||
platforms:
|
||||
- name: EL
|
||||
versions:
|
||||
- 6
|
||||
- 7
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- precise
|
||||
- trusty
|
||||
galaxy_tags:
|
||||
- testing
|
||||
- integration
|
||||
- ansible
|
||||
- dependencies
|
||||
dependencies: []
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
|
||||
- name: Install sudo
|
||||
yum: name=sudo state=installed
|
||||
ignore_errors: true
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- name: Install sudo
|
||||
apt: name=sudo state=installed
|
||||
ignore_errors: true
|
||||
when: ansible_os_family == 'Debian'
|
||||
|
||||
- name: Install RH epel
|
||||
yum: name="epel-release" state=installed
|
||||
sudo: true
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- name: Install RH ansible dependencies
|
||||
yum: name="{{ item }}" state=installed
|
||||
sudo: true
|
||||
with_items:
|
||||
- python-pip
|
||||
- python-httplib2
|
||||
- rsync
|
||||
- subversion
|
||||
- mercurial
|
||||
- git
|
||||
- rubygems
|
||||
- unzip
|
||||
- openssl
|
||||
- make
|
||||
- gcc
|
||||
- python-devel
|
||||
- libselinux-python
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
- apt: update_cache=yes
|
||||
when: ansible_os_family == 'Debian'
|
||||
|
||||
- name: Install Debian ansible dependencies
|
||||
apt: name="{{ item }}" state=installed update_cache=yes
|
||||
sudo: true
|
||||
with_items:
|
||||
- python-pip
|
||||
- python-httplib2
|
||||
- rsync
|
||||
- subversion
|
||||
- mercurial
|
||||
- git
|
||||
- unzip
|
||||
- python-dev
|
||||
when: ansible_os_family == 'Debian'
|
||||
|
||||
- name: Install ubuntu 12.04 ansible dependencies
|
||||
apt: name="{{ item }}" state=installed update_cache=yes
|
||||
sudo: true
|
||||
with_items:
|
||||
- rubygems
|
||||
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == "12.04"
|
||||
|
||||
- name: Install ubuntu 14.04 ansible dependencies
|
||||
apt: name="{{ item }}" state=installed update_cache=yes
|
||||
sudo: true
|
||||
with_items:
|
||||
- rubygems-integration
|
||||
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == "14.04"
|
||||
|
||||
- name: Install ansible pip deps
|
||||
sudo: true
|
||||
pip: name="{{ item }}"
|
||||
with_items:
|
||||
- PyYAML
|
||||
- Jinja2
|
||||
- paramiko
|
||||
|
||||
- name: Remove tty sudo requirement
|
||||
sudo: true
|
||||
lineinfile: "dest=/etc/sudoers regexp='^Defaults[ , ]*requiretty' line='#Defaults requiretty'"
|
||||
when: ansible_os_family == 'RedHat'
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
localhost ansible_connection=local
|
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
- name: Bring up docker containers
|
||||
hosts: localhost
|
||||
gather_facts: false
|
||||
vars:
|
||||
inventory:
|
||||
- name: ansible_test_deps_host_1
|
||||
image: "chrismeyers/centos6"
|
||||
- name: ansible_test_deps_host_2
|
||||
image: "chrismeyers/ubuntu12.04"
|
||||
- name: ansible_test_deps_host_3
|
||||
image: "ubuntu-upstart:14.04"
|
||||
roles:
|
||||
- { role: provision_docker, provision_docker_company: 'ansible', provision_docker_inventory: "{{ inventory }}" }
|
||||
|
||||
- name: Run ansible_test_deps Tests
|
||||
hosts: docker_containers
|
||||
vars:
|
||||
git_dir: "/tmp/ansible"
|
||||
roles:
|
||||
- { role: ansible_test_deps }
|
||||
tasks:
|
||||
- name: Clone ansible
|
||||
git:
|
||||
repo: "https://github.com/ansible/ansible.git"
|
||||
dest: "{{ git_dir }}"
|
||||
- name: Invoke ansible in hacking mode
|
||||
shell: "cd {{ git_dir }} && . hacking/env-setup && ansible --version && ansible-playbook --version"
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
- src: chrismeyersfsu.provision_docker
|
||||
name: provision_docker
|
|
@ -0,0 +1 @@
|
|||
../../../ansible_test_deps
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
# vars file for .
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
- name: Sync ansible repo to ec2 instance
|
||||
synchronize:
|
||||
src: "{{ sync_dir }}/"
|
||||
dest: "~/ansible"
|
||||
|
||||
- name: Get ansible source dir
|
||||
sudo: false
|
||||
shell: "cd ~ && pwd"
|
||||
register: results
|
||||
|
||||
- shell: ". hacking/env-setup && cd test/integration && make {{ run_integration_make_target }}"
|
||||
sudo: true
|
||||
environment:
|
||||
TEST_FLAGS: "{{ run_integration_test_flags|default(lookup('env', 'TEST_FLAGS')) }}"
|
||||
CREDENTIALS_FILE: "{{ run_integration_credentials_file|default(lookup('env', 'CREDENTIALS_FILE')) }}"
|
||||
args:
|
||||
chdir: "{{ results.stdout }}/ansible"
|
||||
register: test_results
|
||||
ignore_errors: true
|
Loading…
Reference in a new issue