From b4fbfadeec4119255654024f5f3b732558c7f153 Mon Sep 17 00:00:00 2001 From: Sergio Oliveira Campos <seocam@seocam.com> Date: Mon, 17 Aug 2020 16:10:23 -0300 Subject: [PATCH] Added Azure pipelines to build test containers Added a pipeline file (tests/azure/build-containers.yml) to build test containers and upload them to quay.io. The pipeline will create containers with IPA pre-installed for testing proposes on three different Linux containers: CentOS 7, CentOS 8 and Fedora Latest. --- molecule/centos-7-build/molecule.yml | 2 -- molecule/centos-7/molecule.yml | 2 -- molecule/centos-8-build/molecule.yml | 2 -- molecule/centos-8/molecule.yml | 2 -- molecule/fedora-latest-build/Dockerfile | 30 ++++++++++++++++ molecule/fedora-latest-build/molecule.yml | 18 ++++++++++ molecule/fedora-latest/molecule.yml | 18 ++++++++++ .../resources/playbooks/prepare-build.yml | 29 +-------------- .../resources/playbooks/prepare-common.yml | 29 +++++++++++++++ molecule/resources/playbooks/prepare.yml | 4 ++- tests/azure/build-containers.yml | 31 ++++++++++++++++ tests/azure/templates/build_container.yml | 35 +++++++++++++++++++ 12 files changed, 165 insertions(+), 37 deletions(-) create mode 100644 molecule/fedora-latest-build/Dockerfile create mode 100644 molecule/fedora-latest-build/molecule.yml create mode 100644 molecule/fedora-latest/molecule.yml create mode 100644 molecule/resources/playbooks/prepare-common.yml create mode 100644 tests/azure/build-containers.yml create mode 100644 tests/azure/templates/build_container.yml diff --git a/molecule/centos-7-build/molecule.yml b/molecule/centos-7-build/molecule.yml index 0360b8cc..a9a71d95 100644 --- a/molecule/centos-7-build/molecule.yml +++ b/molecule/centos-7-build/molecule.yml @@ -1,6 +1,4 @@ --- -dependency: - name: galaxy driver: name: docker platforms: diff --git a/molecule/centos-7/molecule.yml b/molecule/centos-7/molecule.yml index 0603e267..29036317 100644 --- a/molecule/centos-7/molecule.yml +++ b/molecule/centos-7/molecule.yml @@ -1,6 +1,4 @@ --- -dependency: - name: galaxy driver: name: docker platforms: diff --git a/molecule/centos-8-build/molecule.yml b/molecule/centos-8-build/molecule.yml index a7ffacdf..e19fe11a 100644 --- a/molecule/centos-8-build/molecule.yml +++ b/molecule/centos-8-build/molecule.yml @@ -1,6 +1,4 @@ --- -dependency: - name: galaxy driver: name: docker platforms: diff --git a/molecule/centos-8/molecule.yml b/molecule/centos-8/molecule.yml index 4e1ab793..eba21c6a 100644 --- a/molecule/centos-8/molecule.yml +++ b/molecule/centos-8/molecule.yml @@ -1,6 +1,4 @@ --- -dependency: - name: galaxy driver: name: docker platforms: diff --git a/molecule/fedora-latest-build/Dockerfile b/molecule/fedora-latest-build/Dockerfile new file mode 100644 index 00000000..f3c2ef62 --- /dev/null +++ b/molecule/fedora-latest-build/Dockerfile @@ -0,0 +1,30 @@ +FROM fedora:latest +ENV container=docker + +RUN rm -fv /var/cache/dnf/metadata_lock.pid; \ +dnf makecache; \ +dnf --assumeyes install \ + /usr/bin/python3 \ + /usr/bin/python3-config \ + /usr/bin/dnf-3 \ + sudo \ + bash \ + systemd \ + procps-ng \ + iproute && \ +dnf clean all; \ +(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ +rm -f /lib/systemd/system/multi-user.target.wants/*;\ +rm -f /etc/systemd/system/*.wants/*;\ +rm -f /lib/systemd/system/local-fs.target.wants/*; \ +rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ +rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ +rm -f /lib/systemd/system/basic.target.wants/*;\ +rm -f /lib/systemd/system/anaconda.target.wants/*; \ +rm -rf /var/cache/dnf/; + +STOPSIGNAL RTMIN+3 + +VOLUME ["/sys/fs/cgroup"] + +CMD ["/usr/sbin/init"] diff --git a/molecule/fedora-latest-build/molecule.yml b/molecule/fedora-latest-build/molecule.yml new file mode 100644 index 00000000..624d99f2 --- /dev/null +++ b/molecule/fedora-latest-build/molecule.yml @@ -0,0 +1,18 @@ +--- +driver: + name: docker +platforms: + - name: fedora-latest-build + image: fedora-latest + dockerfile: Dockerfile + hostname: ipaserver.test.local + dns_servers: + - 8.8.8.8 + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + command: /usr/sbin/init + privileged: true +provisioner: + name: ansible + playbooks: + prepare: ../resources/playbooks/prepare-build.yml diff --git a/molecule/fedora-latest/molecule.yml b/molecule/fedora-latest/molecule.yml new file mode 100644 index 00000000..af6fd8d6 --- /dev/null +++ b/molecule/fedora-latest/molecule.yml @@ -0,0 +1,18 @@ +--- +driver: + name: docker +platforms: + - name: fedora-latest + image: quay.io/ansible-freeipa/upstream-tests:fedora-latest + pre_build_image: true + hostname: ipaserver.test.local + dns_servers: + - 127.0.0.1 + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + command: /usr/sbin/init + privileged: true +provisioner: + name: ansible + playbooks: + prepare: ../resources/playbooks/prepare.yml diff --git a/molecule/resources/playbooks/prepare-build.yml b/molecule/resources/playbooks/prepare-build.yml index 784fe7e3..d6523699 100644 --- a/molecule/resources/playbooks/prepare-build.yml +++ b/molecule/resources/playbooks/prepare-build.yml @@ -2,34 +2,7 @@ - name: Converge hosts: all tasks: - - name: Ensure IPv6 is ENABLED - sysctl: - name: "{{ item.name }}" - value: "{{ item.value }}" - sysctl_set: yes - state: present - reload: yes - with_items : - - name: net.ipv6.conf.all.disable_ipv6 - value: 0 - - name: net.ipv6.conf.lo.disable_ipv6 - value: 0 - - name: net.ipv6.conf.eth0.disable_ipv6 - value: 1 - - - name: stat protected_regular - stat: - path: /proc/sys/fs/protected_regular - register: result - - - name: Ensure fs.protected_regular is disabled - sysctl: - name: fs.protected_regular - value: 0 - sysctl_set: yes - state: present - reload: yes - when: result.stat.exists + - include_tasks: prepare-common.yml - name: Ensure sudo package is installed package: diff --git a/molecule/resources/playbooks/prepare-common.yml b/molecule/resources/playbooks/prepare-common.yml new file mode 100644 index 00000000..3a950157 --- /dev/null +++ b/molecule/resources/playbooks/prepare-common.yml @@ -0,0 +1,29 @@ +- name: Ensure IPv6 is ENABLED + sysctl: + name: "{{ item.name }}" + value: "{{ item.value }}" + sysctl_set: yes + state: present + reload: yes + with_items : + - name: net.ipv6.conf.all.disable_ipv6 + value: 0 + - name: net.ipv6.conf.lo.disable_ipv6 + value: 0 + - name: net.ipv6.conf.eth0.disable_ipv6 + value: 1 + +- name: stat protected_regular + stat: + path: /proc/sys/fs/protected_regular + register: result + +- name: Ensure fs.protected_regular is disabled + sysctl: + name: fs.protected_regular + value: 0 + sysctl_set: yes + state: present + reload: yes + when: result.stat.exists + diff --git a/molecule/resources/playbooks/prepare.yml b/molecule/resources/playbooks/prepare.yml index fc564d01..74abef81 100644 --- a/molecule/resources/playbooks/prepare.yml +++ b/molecule/resources/playbooks/prepare.yml @@ -2,12 +2,14 @@ - name: Converge hosts: all tasks: + - include_tasks: prepare-common.yml + - name: Ensure lock dirs for DS exists file: state: directory owner: dirsrv group: dirsrv - path: "{{ item }} " + path: "{{ item }}" loop: - /var/lock/dirsrv/ - /var/lock/dirsrv/slapd-TEST-LOCAL/ diff --git a/tests/azure/build-containers.yml b/tests/azure/build-containers.yml new file mode 100644 index 00000000..2f987809 --- /dev/null +++ b/tests/azure/build-containers.yml @@ -0,0 +1,31 @@ +--- + +schedules: +- cron: "0 0 * * *" + displayName: Daily midnight build + branches: + include: + - master + +pool: + vmImage: 'ubuntu-18.04' + +jobs: + +- template: templates/build_container.yml + parameters: + job_name_suffix: Centos7 + container_name: centos-7 + build_scenario_name: centos-7-build + +- template: templates/build_container.yml + parameters: + job_name_suffix: Centos8 + container_name: centos-8 + build_scenario_name: centos-8-build + +- template: templates/build_container.yml + parameters: + job_name_suffix: FedoraLatest + container_name: fedora-latest + build_scenario_name: fedora-latest-build diff --git a/tests/azure/templates/build_container.yml b/tests/azure/templates/build_container.yml new file mode 100644 index 00000000..8649a336 --- /dev/null +++ b/tests/azure/templates/build_container.yml @@ -0,0 +1,35 @@ + +parameters: + - name: job_name_suffix + type: string + - name: container_name + type: string + - name: build_scenario_name + type: string + +jobs: +- job: BuildTestImage${{ parameters.job_name_suffix }} + displayName: Build ${{ parameters.container_name }} test container + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.6' + + - script: python -m pip install --upgrade pip setuptools wheel + displayName: Install tools + + - script: pip install molecule[docker] + displayName: Install molecule + + - script: molecule create -s ${{ parameters.build_scenario_name }} + displayName: Create test container + + - script: | + docker stop ${{ parameters.build_scenario_name }} + docker commit ${{ parameters.build_scenario_name }} quay.io/ansible-freeipa/upstream-tests:${{ parameters.container_name }} + docker login -u="$QUAY_ROBOT_USERNAME" -p="$QUAY_ROBOT_TOKEN" quay.io + docker push quay.io/ansible-freeipa/upstream-tests:${{ parameters.container_name }} + displayName: Save image and upload + env: + # Secrets needs to be mapped as env vars to work properly + QUAY_ROBOT_TOKEN: $(QUAY_ROBOT_TOKEN) -- GitLab