Add openshift-base job

This change adds a PoC job to use openshift as a build resource.

Depends-On: Icdb9e800177dc770c58f65b02456a6b904be0666
Change-Id: I74f8fc56b72e40d6b69ed55adc2b44d050f50d3c
This commit is contained in:
Tristan Cacqueray 2018-05-27 06:20:15 +00:00
parent e79613fa30
commit 62d1092c3b
4 changed files with 251 additions and 0 deletions

View File

@ -0,0 +1,68 @@
---
- name: create project ImageStream spec file
copy:
dest: "{{ zuul.executor.work_root }}/project_imagestream.yaml"
content: |
apiVersion: v1
kind: ImageStream
metadata:
generation: 1
labels:
app: "{{ zuul.project.short_name }}"
name: "{{ zuul.project.short_name }}"
namespace: "{{ zuul.resource.namespace }}"
resourceversion: '1487'
spec:
lookupPolicy:
local: false
- name: apply project ImageStream
command: "oc apply -f {{ zuul.executor.work_root }}/project_imagestream.yaml"
- name: create project BuildConfig spec file
copy:
dest: "{{ zuul.executor.work_root }}/project_buildconfig.yaml"
content: |
apiVersion: v1
kind: BuildConfig
metadata:
labels:
app: "{{ zuul.project.short_name }}"
name: "{{ zuul.project.short_name }}"
namespace: "{{ zuul.resource.namespace }}"
resourceVersion: '2488'
spec:
output:
to:
kind: ImageStreamTag
name: '{{ zuul.project.short_name }}:latest'
postCommit: {}
resources: {}
runPolicy: Serial
source:
git:
ref: master
uri: 'http://zuul-merger-server:8080/'
type: Git
strategy:
sourceStrategy:
from:
kind: ImageStreamTag
name: '{{ base_image }}'
namespace: openshift
type: Source
triggers:
- type: ImageChange
- type: ConfigChange
status:
lastVersion: 1
- name: apply project BuildConfig
command: "oc apply -f {{ zuul.executor.work_root }}/project_buildconfig.yaml"
- name: wait for project image built
command: oc get builds -o "jsonpath={.items[?(@.metadata.labels.buildconfig!='zuul-merger-server')].status.phase}"
register: _project_build
retries: 120
delay: 1
until: "'Complete' in _project_build.stdout"

View File

@ -0,0 +1,5 @@
---
- hosts: localhost
tasks:
- include_tasks: prepare-namespace.yaml
- include_tasks: build-project.yaml

View File

@ -0,0 +1,166 @@
---
- name: setup kube config
shell: >
oc --namespace {{ zuul.resource.namespace }} \
login {{ zuul.resource.host }} \
--insecure-skip-tls-verify={{ zuul.resource.skiptls }} \
--token $(echo {{ zuul.resource.token }} | base64 -d)
# Note: this can probably be simplified by running a ready to use http server.
# In this PoC, the http server is constructed using the openshift/httpd-ex template
- name: create zuul-merger ImageStream spec file
copy:
dest: "{{ zuul.executor.work_root }}/zm_imagestream.yaml"
content: |
apiVersion: v1
kind: ImageStream
metadata:
generation: 1
labels:
app: zuul-merger-server
name: zuul-merger-server
namespace: "{{ zuul.resource.namespace }}"
resourceversion: '1487'
spec:
lookupPolicy:
local: false
- name: apply zuul-merger ImageStream
command: "oc apply -f {{ zuul.executor.work_root }}/zm_imagestream.yaml"
- name: create zuul-merger BuildConfig spec file
copy:
dest: "{{ zuul.executor.work_root }}/zm_buildconfig.yaml"
content: |
apiVersion: v1
kind: BuildConfig
metadata:
labels:
app: zuul-merger-server
name: zuul-merger-server
namespace: "{{ zuul.resource.namespace }}"
resourceVersion: '2488'
spec:
output:
to:
kind: ImageStreamTag
name: 'zuul-merger-server:latest'
postCommit: {}
resources: {}
runPolicy: Serial
source:
git:
ref: master
uri: 'https://github.com/openshift/httpd-ex.git'
type: Git
strategy:
sourceStrategy:
from:
kind: ImageStreamTag
name: 'httpd:2.4'
namespace: openshift
type: Source
triggers:
- type: ImageChange
- type: ConfigChange
status:
lastVersion: 1
- name: apply zuul-merger BuildConfig
command: "oc apply -f {{ zuul.executor.work_root }}/zm_buildconfig.yaml"
- name: create zuul-merger DeploymentConfig spec file
copy:
dest: "{{ zuul.executor.work_root }}/zm_deploymentconfig.yaml"
content: |
apiVersion: v1
kind: DeploymentConfig
metadata:
generation: 2
labels:
app: zuul-merger-server
name: zuul-merger-server
namespace: "{{ zuul.resource.namespace }}"
resourceVersion: '2604'
spec:
replicas: 1
selector:
deploymentconfig: zuul-merger-server
strategy:
resources: {}
type: Rolling
template:
metadata:
labels:
app: zuul-merger-server
deploymentconfig: zuul-merger-server
spec:
containers:
- image: "172.30.1.1:5000/{{ zuul.resource.namespace }}/zuul-merger-server"
# imagePullPolicy: Always
name: zuul-merger-server
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 8443
protocol: TCP
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
test: false
- name: apply zuul-merger DeploymentConfig
command: "oc apply -f {{ zuul.executor.work_root }}/zm_deploymentconfig.yaml"
- name: create zuul-merger Service spec file
copy:
dest: "{{ zuul.executor.work_root }}/zm_service.yaml"
content: |
apiVersion: v1
kind: Service
metadata:
labels:
app: zuul-merger-server
name: zuul-merger-server
namespace: "{{ zuul.resource.namespace }}"
resourceVersion: '12063'
spec:
ports:
- name: 8080-tcp
port: 8080
protocol: TCP
targetPort: 8080
selector:
deploymentconfig: zuul-merger-server
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
- name: apply zuul-merger Service
command: "oc apply -f {{ zuul.executor.work_root }}/zm_service.yaml"
- name: get zuul-merger-server pod name
command: oc get pods --field-selector=status.phase=Running -o "jsonpath={.items[?(@.metadata.labels.app=='zuul-merger-server')].metadata.name}"
register: _zm_name
retries: 120
delay: 1
until: "'zuul-merger' in _zm_name.stdout"
- name: prepare dumb bare clone of future state
git:
repo: "{{ zuul.executor.work_root }}/{{ zuul.project.src_dir }}"
dest: "{{ zuul.executor.work_root }}/{{ zuul.project.src_dir }}.git"
bare: yes
- name: update server info
command: git update-server-info
args:
chdir: "{{ zuul.executor.work_root }}/{{ zuul.project.src_dir }}.git"
- name: copy project future state to the http server
command: "oc rsync {{ zuul.executor.work_root }}/{{ zuul.project.src_dir }}.git/ {{ _zm_name.stdout }}:/opt/app-root/src/"

View File

@ -26,3 +26,15 @@
roles:
- zuul: openstack-infra/zuul-jobs
timeout: 1800
- job:
name: openshift-base
parent: null
description: |
A base job that build a container image using project future state.
pre-run: playbooks/openshift/pre.yaml
roles:
- zuul: openstack-infra/zuul-jobs
timeout: 1800
vars:
base_image: "python:3.6"