parent
d66cbdd27f
commit
ccff406cdc
4 changed files with 115 additions and 18 deletions
62
.github/workflows/README.md
vendored
Normal file
62
.github/workflows/README.md
vendored
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
# GitHub Actions Workflows
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
- workloads run using [GitHub self-hosted runners](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners)
|
||||||
|
- project admins maintain a private Google Compute Engine VM for running tests
|
||||||
|
- VM should be at least n1-standard-4 with 50GB persistent disk
|
||||||
|
- instructions for setting up the VM can be found in repo settings under "Actions"
|
||||||
|
- ⚠️ WARNING: VM should be set up with no GCP service account
|
||||||
|
- external contributors could contribute malicious PRs to run code on our test VM. Ensure no service accounts or other secrets exist on the VM
|
||||||
|
- An empty GCP project should be used for extra security
|
||||||
|
- to set up dependencies, run the following commands:
|
||||||
|
```
|
||||||
|
# install kubectl
|
||||||
|
sudo apt-get install kubectl
|
||||||
|
|
||||||
|
# install kind
|
||||||
|
curl -Lo ./kind "https://github.com/kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64" && \
|
||||||
|
chmod +x ./kind && \
|
||||||
|
sudo mv ./kind /usr/local/bin
|
||||||
|
|
||||||
|
# install skaffold
|
||||||
|
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
|
||||||
|
chmod +x skaffold && \
|
||||||
|
sudo mv skaffold /usr/local/bin
|
||||||
|
|
||||||
|
# install docker
|
||||||
|
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common && \
|
||||||
|
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - && \
|
||||||
|
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" && \
|
||||||
|
sudo apt update && \
|
||||||
|
sudo apt install docker-ce && \
|
||||||
|
sudo usermod -aG docker ${USER}
|
||||||
|
|
||||||
|
# logout and back on
|
||||||
|
exit
|
||||||
|
```
|
||||||
|
- ensure GitHub Actions runs as background service:
|
||||||
|
```
|
||||||
|
sudo ∼/actions-runner/svc.sh install
|
||||||
|
sudo ∼/actions-runner/svc.sh start
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
## Workflows
|
||||||
|
|
||||||
|
### ci.yaml
|
||||||
|
|
||||||
|
#### Triggers
|
||||||
|
- commits pushed to master
|
||||||
|
- PRs to master
|
||||||
|
- PRs to release/ branches
|
||||||
|
|
||||||
|
#### Actions
|
||||||
|
- ensures kind cluster is running
|
||||||
|
- builds all containers in src/
|
||||||
|
- deploys local containers to kind
|
||||||
|
- ensures all pods reach ready state
|
||||||
|
- ensures HTTP request to frontend returns HTTP status 200
|
||||||
|
- deploys manifests from /releases
|
||||||
|
- ensures all pods reach ready state
|
||||||
|
- ensures HTTP request to frontend returns HTTP status 200
|
53
.github/workflows/ci.yml
vendored
Normal file
53
.github/workflows/ci.yml
vendored
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
name: "Continuous Integration"
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
# run on pushes to master or release/*
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- release/*
|
||||||
|
pull_request:
|
||||||
|
# run on pull requests targeting master
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
jobs:
|
||||||
|
run-tests:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Setup Cluster
|
||||||
|
run: |
|
||||||
|
set -x
|
||||||
|
kind delete cluster || true
|
||||||
|
kind create cluster
|
||||||
|
kubectl get nodes
|
||||||
|
- name: Deploy From Source
|
||||||
|
run: |
|
||||||
|
skaffold run
|
||||||
|
- name: Wait For Pods
|
||||||
|
timeout-minutes: 20
|
||||||
|
run: |
|
||||||
|
set -x
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/adservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/cartservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/checkoutservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/currencyservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/emailservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/frontend
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/loadgenerator
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/paymentservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/productcatalogservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/recommendationservice
|
||||||
|
kubectl wait --for=condition=available --timeout=500s deployment/shippingservice
|
||||||
|
- name: Smoke Test
|
||||||
|
timeout-minutes: 5
|
||||||
|
run: |
|
||||||
|
set -x
|
||||||
|
RESULT=" "
|
||||||
|
while [[ "$RESULT" != " HTTP/1.1 200 OK" ]]; do
|
||||||
|
sleep 1
|
||||||
|
RESULT=$(kubectl exec deployments/frontend -- sh -c "wget --spider -S "http://frontend" 2>&1 | grep 'HTTP/'")
|
||||||
|
echo "front end response: $RESULT"
|
||||||
|
done
|
||||||
|
if [[ "$RESULT" != " HTTP/1.1 200 OK" ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
12
.travis.yml
12
.travis.yml
|
@ -1,12 +0,0 @@
|
||||||
sudo: required
|
|
||||||
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
install:
|
|
||||||
- curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/v0.20.0/skaffold-linux-amd64
|
|
||||||
- chmod +x skaffold
|
|
||||||
- sudo mv skaffold /usr/local/bin
|
|
||||||
|
|
||||||
script:
|
|
||||||
- skaffold build --profile travis-ci
|
|
|
@ -49,12 +49,6 @@ deploy:
|
||||||
manifests:
|
manifests:
|
||||||
- ./kubernetes-manifests/**.yaml
|
- ./kubernetes-manifests/**.yaml
|
||||||
profiles:
|
profiles:
|
||||||
# "travis-ci" profile is used to build the images without
|
|
||||||
# pushing them.
|
|
||||||
- name: travis-ci
|
|
||||||
build:
|
|
||||||
local:
|
|
||||||
push: false
|
|
||||||
# "gcb" profile allows building and pushing the images
|
# "gcb" profile allows building and pushing the images
|
||||||
# on Google Container Builder without requiring docker
|
# on Google Container Builder without requiring docker
|
||||||
# installed on the developer machine. However, note that
|
# installed on the developer machine. However, note that
|
||||||
|
|
Loading…
Reference in a new issue