Add a quick-start test job

This playbook performs approximately the same steps documented in
the quick-start tutorial.  Use it to verify that things still function.

Note that it does not yet build the images from the current source
(rather, it downloads them from dockerhub) so it is not suitable
as a gate check (it does not use the change under test in zuul).
It does, however,  use the sample config files from the change under
test, so can be used to verify changes to those.

Incidentally, this is the first-ever live functional test between
Zuul, Nodepool, and Gerrit.

Change-Id: I5b3dc4b8a8d409787d07b4ad155898f97f1e9eb9
This commit is contained in:
James E. Blair 2018-10-10 11:30:01 -07:00
parent a1d8fc7a51
commit 011d765915
3 changed files with 197 additions and 0 deletions

View File

@ -57,6 +57,11 @@
vars:
zuul_api_url: https://softwarefactory-project.io/zuul
- job:
name: zuul-quick-start
description: Run the commands in the Zuul quick-start documentation.
run: playbooks/quick-start/run.yaml
- project:
check:
jobs:
@ -86,6 +91,8 @@
- web/.*
- zuul-stream-functional
- zuul-tox-remote
- zuul-quick-start:
voting: false
- pbrx-build-container-images:
vars:
pbrx_prefix: zuul

View File

@ -0,0 +1,141 @@
- name: Run docker-compose up
shell:
cmd: docker-compose up -d
chdir: src/git.openstack.org/openstack-infra/zuul/doc/source/admin/examples
become: true
- name: Wait for Gerrit to start
wait_for:
host: localhost
port: 29418
- name: Wait for Zuul user to be created
uri:
url: http://localhost:8080/a/accounts/zuul/sshkeys
method: GET
user: admin
password: secret
register: result
until: result.status == 200 and result.redirected == false
delay: 1
retries: 120
- name: fetch ssh host keys from gerrit
shell: ssh-keyscan -p 29418 localhost >> ~/.ssh/known_hosts
- name: Check if example user exists in Gerrit
uri:
url: http://localhost:8080/accounts/user
status_code: 200, 404
register: user_check
- name: Create example gerrit account
when: user_check.status==404
uri:
url: http://localhost:8080/a/accounts/user
method: PUT
user: admin
password: secret
status_code: 201
body_format: json
body:
name: Example User
ssh_key: "{{ ssh_public_key }}"
http_password: secret
- name: Clone zuul-config
git:
repo: http://localhost:8080/zuul-config
dest: "{{ workspace }}/zuul-config"
- name: Make initial change in zuul-config
copy:
src: ../../doc/source/admin/examples/zuul-config/
dest: "{{ workspace }}/zuul-config/"
- name: Commit and upload initial change in zuul-config
shell:
chdir: "{{ workspace }}/zuul-config/"
executable: /bin/bash
cmd: |
{{ ssh_agent.stdout }}
rm zuul.d/jobs.yaml
git config user.email 'user@example.com'
git config user.name 'Example User'
git config gitreview.username 'user'
git add zuul.d playbooks
git commit -m "Add initial Zuul configuration"
git review -v
- name: Query open changes
uri:
url: http://localhost:8080/a/changes/?q=status:open+project:zuul-config&o=CURRENT_REVISION
method: GET
user: admin
password: secret
return_content: true
register: changes
- name: Approve zuul-config change
uri:
url: "http://localhost:8080/a/changes/{{ (changes.content[5:]|from_json)[0].id }}/revisions/{{ (changes.content[5:]|from_json)[0].current_revision }}/review"
method: POST
user: admin
password: secret
status_code: 200
body_format: json
body:
labels:
Code-Review: +2
Verified: +2
Workflow: +1
- name: Merge zuul-config change
uri:
url: "http://localhost:8080/a/changes/{{ (changes.content[5:]|from_json)[0].id }}/revisions/{{ (changes.content[5:]|from_json)[0].current_revision }}/submit"
method: POST
user: admin
password: secret
status_code: 200
- name: Clone test1
git:
repo: http://localhost:8080/test1
dest: "{{ workspace }}/test1"
- name: Make test change in test1
copy:
src: ../../doc/source/admin/examples/test1/
dest: "{{ workspace }}/test1/"
- name: Commit and upload test change in test1
shell:
chdir: "{{ workspace }}/test1/"
executable: /bin/bash
cmd: |
{{ ssh_agent.stdout }}
git config user.email 'user@example.com'
git config user.name 'Example User'
git config gitreview.username 'user'
mv zuul.yaml .zuul.yaml
git add .zuul.yaml playbooks
git commit -m "Add test Zuul job"
git review
- name: Query open changes
uri:
url: http://localhost:8080/a/changes/?q=status:open+project:test1&o=CURRENT_REVISION
method: GET
user: admin
password: secret
return_content: true
register: changes
- name: Wait for Zuul to report
uri:
url: "http://localhost:8080/a/changes/{{ (changes.content[5:]|from_json)[0].id }}//detail"
method: GET
user: admin
password: secret
return_content: true
register: result
until: (result.content[5:]|from_json).messages|length > 1
delay: 1
retries: 120
- name: Find the log URL
set_fact:
log_url: "{{ (result.content[5:]|from_json).messages[1].message|regex_search('(http://[^ ]*)') }}"
- debug:
msg: "{{ log_url }}"
- name: Fetch log URL
get_url:
url: "{{ log_url }}job-output.txt.gz"
dest: "{{ workspace }}/job-output.txt.gz"
- name: Uncompress log
command: "gunzip -f {{ workspace }}/job-output.txt.gz"
- name: Verify log contents
command: "grep 'Hello world!' {{ workspace }}/job-output.txt"

View File

@ -0,0 +1,49 @@
- hosts: all
vars:
workspace: /tmp/quickstart-test
tasks:
- name: Install docker-compose and git-review
package:
name:
- docker.io # See note [1]
- docker-compose
- git-review
state: present
become: true
- name: Create workspace directory
file:
state: directory
path: "{{ workspace }}"
- name: Generate example user ssh key
command: "ssh-keygen -f {{ workspace }}/id_rsa -N ''"
args:
creates: "{{ workspace }}/id_rsa.pub"
- name: Load example user SSH key
shell: "cat {{ workspace }}/id_rsa.pub"
register: ssh_key_cat
- name: Register example user SSH key
set_fact:
ssh_public_key: "{{ ssh_key_cat.stdout }}"
- name: Start ssh-agent
command: ssh-agent
register: ssh_agent
- name: Add key to ssh agent
shell:
executable: /bin/bash
cmd: |
{{ ssh_agent.stdout }}
ssh-add {{ workspace }}/id_rsa
- block:
- name: Run tasks in ssh agent
include_tasks: main.yaml
always:
- name: Stop ssh-agent
shell:
executable: /bin/bash
cmd: |
{{ ssh_agent.stdout }}
ssh-agent -k
# [1]: docker.io is a recommended package and is therefore typically
# automatically installed, however our test images disable this
# behavior, so it is listed explicitly here.