Wingman Infrastructure
The wingman system is composed of a virtual machine hosting 3 main services.
Jenkins
There is a basic Jenkins instance doing the orchestration and management. It has 3 jobs.
- wingman-trigger: This is the scheduled process.
- wingman: This is the main job which call the Orchestrator service.
- wingman-update: This is a management process. It fetches, compiles and updates the pentaho-wingman service (see below).
wingman-trigger
The trigger is a scheduled job. It runs each X minutes and asks GitHub for a list of the current pull requests for all projects in a list of organizations known to GitHub.
It was designed as part of task ENGOPS-1586. Physically, it consists of a python script. The script can be seen here. It runs periodically on the Jenkins server and takes the following parameters.
Parameter |
Description |
---|---|
-o |
A comma separated list of the names of the organizations to scan for a list of projects. Usually something like: "pentaho,webdetails". |
-t |
The path to a credentials file on your local file system. |
-b |
A comma separated list of the names of the branches to scan. All pull requests for these branches will be considered. |
-ao |
A comma separated list of organization names to which a user must belong to in order for his pull request to be built. |
A typical invocation of this script should look something like this:
python PullRequestRecon.py -o webdetails,pentaho -t ./credentials.cred -b master,6.1,6.0 -ao webdetails,pentaho
wingman
This is the main job on Jenkins which communicates with the Wingman service. It is a pretty simple job which gets invoked by the wingman-trigger job. It can also be launched manually.
This job takes a few parameters.
Parameter |
Description |
---|---|
WINGMAN_ORG |
The name of the organization which owns the pull request we want built. |
WINGMAN_REPO |
The name of the repository which owns the pull request we want built. |
WINGMAN_PR_NUMBER |
The number of the pull request to build. |
With these parameters, Jenkins simply invokes the REST endpoint of the wingman service by adding the parameters supplied. A typical invocation should look something like this:
#!/bin/bash JSON=`echo "{\"SourceRetriever\": { \"SourceControlType\": \"github\", \"Organization\": \"${WINGMAN_ORG}\", \"Repository\": \"${WINGMAN_REPO}\", \"PullRequest\": \"${WINGMAN_PR_NUMBER}\"}, \"StatusUpdater\": {\"WingmanUrl\": \"$BUILD_URL\"}}"` curl -N -s -S -H "Content-Type: application/json"\ -X POST -d "$JSON"\ http://localhost:8181/cxf/orchestrator/orchestrate
TODO
- DNS entries, IP addresses, VM name
- Services (Jenkins, others?)
- Jenkins jobs general overview
- The docker-build project
- GitHub repo for docker-build
- General architecture overview
- Fixing build issues for specific builds
- Adding new analyzers
- Detection of new pull requests (aka. Project Elios)
- GitHub repo
- General architecture overview
- Build detection algorithm