aallbrig / carpe-noctem Goto Github PK
View Code? Open in Web Editor NEWCarpe Noctem project
Carpe Noctem project
Render a phaser environment for the game to render in.
Create Jenkins Job Groups, plug in a Builder and create a Jenkins view
We must
Organize current Jenkins Jobs (JJ) into the phases that represent a automated, continuous delivery process. To this end we must create new Jenkins Job Groups (JJG)(http://docs.openstack.org/infra/jenkins-job-builder/definition.html#job-group), new Jenkins Views (JV)(http://docs.openstack.org/infra/jenkins-job-builder/definition.html#views), and new Jenkins Porjects (JP)(http://docs.openstack.org/infra/jenkins-job-builder/definition.html#project)
Therefore we must fill in any missing JJ from this organized list of JJs.
---
- All in list are a JJG(
Acceptance Phase(
checkout to disk,
static code analysis of code on disk,
unit test(
api contracts are respected(
valid request -> valid response,
invalid request -> valid, expected response
),
status codes all green for all pages and APIs,
low fidelity highly mocked or stubbed UI tests,
light application logic tests or whatever else
),
compile source code on disk to distributable artifacts on disk,
package distributable artifacts to appropriate external repository
),
Load & Performance Phase(
spin up target environment with infrastructure,
create or migrate DB and populate with anonymized production data,
deploy artifacts onto provisioned infrastructure (staging),
health test(
infrastructure exists,
status codes all green for all system pages and APIs,
third-party vendors are 200 OK
),
functional test(
api contracts are respected(
valid request -> valid response,
invalid request -> valid, expected response
),
Can a selenium bot do all happy UX paths through UI?,
Can a selenium bot ensure past problems don't exist related to UI?,
Are third party vendor software panels getting expected traffic?,
Are third party vendor software panels getting expected results?,
Can a selenium bot play test through all levels?
),
(performance test)(under ideal conditions)(
Do site assets deliver in acceptable time under condition?,
Do deliverables deliver in acceptable time under condition?,
Is game running at 60 FPS across all playable contexts?,
Are API response times still great?
),
load test(
(performance test)(under load conditions),
Can system handle production-like traffic nominally?,
Can system infrastructure handle a huge spike in traffic appropriately?,
Optional manual exploration can now occur (notify stakeholders)
)
),
Release Phase(
Rollout new artifacts to production by means of a BLUE/GREEN deploy,
Optional "tear down staging until next change or manual intervention" can occur now (notify stakeholders)
),
Production Monitoring Phase (continuous)(
(performance test)(under production conditions),
functional test() every so often,
performance test() to collect additional system metrics,
persist log history(
for each log service in [ELK, CloudWatch infrastructure logs]
Persist in AWS Glacier if log.date in log service is > 6 months
)
)
)
- All in list are JV(
Available atomic jobs or phases I can rerun manually and can be rerun,
Current environment status(
staging,
production
)
)
- All in list are JP(
Automated Continuous Delivery Pipeline
)
Provision Jenkins VM with HipChat
plugin (Future issue, probably)
Integrate with a chat client (Slack? Discord?) to log a historic build record (and get "CloudOps" strategies going). (Future issue, probably)
This way we can ensure we are able to talk about all deploys surrounding a deploy if things go wrong (like if we merge stage
to master
and the value stream breaks down at a particular location). The first place to go will be the "#deployments" channel.
More "master is broken" strategies include:
#deployments
channel. (Future issue, probably)Create walk cycle and render into player environment
Provision Web Dev VM
This VM will have exposed ports and synced folders from guest
OS to host
OS. Use the Vagrantfile.j2
to modify target VM. At the very least for the developer's OS (MacOSX
represent).
This VM will have developer friendly versions of software. JDK
, endless watcher versions of software that restart on failure (e.g. nodemon
or activator
or sbt
) is a must.
The VM will display developer framework warnings on all relevant ports.
Browser extensions always use port 35729
according to feedback.livereload.com
Therefore ports such as these items will have to be exposed
35729
(pass through to host OS)8000
(pass through to host OS)8443
(pass through to host OS)And updated Vagrantfile
will be committed to the project (so it's easy for other developers to run sh stop && sh run.sh
to redeploy.)
Provision Build Dev VM
This VM will have exposed ports and synced folders from guest
OS to host
OS. Use the Vagrantfile.j2
to modify target VM. At the very least for the developer's OS (MacOSX
represent).
ports like
http://localhost.com
(port 80) - For the production artifacts with maximum core business valuehttps://localhost.com
(port 443) - For the production artifacts with maximum core business valuehttp://localhost.com:7080
ELK (ElasticSearch
, Logstash
, Kibana
monitoring system)http://localhost.com:7443
Secure, hardened ELKhttp://localhost.com:111080
Consul (feature flag framework)https://localhost.com:111443
Secure, hardened Consul serverThis VM will have production sturdy versions of software end software. Perhaps even Docker
images working to use up a maximum amount of VM resources.
The VM will expose all devops/ops tooling used to diagnose production issues.
An updated Vagrantfile
will be committed to the project to run this awesome "build box".
Jenkins is going to be the backbone of this project. We need to create jobs that coincide with a standard continuous delivery pipeline. These jobs will just be a shell job but we can fill in the blanks later.
Additions should be made to the README.md
file to document CI pipeline notes.
Set up initial Ubuntu OS provision script in Ansible
run.sh
or other setup script to provision your python enabled OS (Windows
may need to install python
and pip
) and see a failure for Ubuntu
or a blank success.ansible all -m setup -a 'filter=ansible_distribution'
if you have the Vagrant
VMs operational or see this sample run
> ansible all -m setup -a 'filter=ansible_distribution'
# example run
jenkins-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
127.0.0.1 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "MacOSX"
},
"changed": false
}
database-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
build-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
web-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
# Gotta love having many models here
role
's meta
folder as a dependency. For software this will be a one line change, for other multi-step processes it may require writing some ansible tasks
(represented in the tasks
folder of any role
).game over tied to health = 0.
Set up initial Windows OS provision script in Ansible
run run.sh
or other setup script to provision your python enabled OS (Windows
may need to install python
and pip
) and see a failure for Windows
or a blank success.
Find out target OS name in ansible ansible all -m setup -a 'filter=ansible_distribution'
if you have the Vagrant
VMs operational or see this sample run
> ansible all -m setup -a 'filter=ansible_distribution'
# example run
jenkins-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
127.0.0.1 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "MacOSX"
},
"changed": false
}
database-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
build-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
web-dev | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu"
},
"changed": false
}
# Why would I have a Windows VM?
Identify Ansible roles in Ansible Galaxy (the package manager) for the different software required to set this project up. If you find any, throw those in the role
's meta
folder as a dependency. For software this will be a one line change, for other multi-step processes it may require writing some ansible tasks
(represented in the tasks
folder of any role
).
I would recommend using Chocolatey
as the package management software because it handles Windows. It is to Windows as Homebrew is to MacOSX.
Pat yourself on the back and send in a PR. Many thanks because I may never have gotten around to it otherwise. I mean, I guess if I wanted to code on my gaming machine but why otherwise? <3
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.