Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
7780497
Use Single job starter workflow
AutomationGeek-dev Mar 22, 2021
bc3a488
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
bcfe4fe
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
c9cbb9b
Create docker-compose.yml
AutomationGeek-dev Mar 22, 2021
d0ee9ec
Update docker-compose.yml
AutomationGeek-dev Mar 22, 2021
61c9dcd
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
e077e10
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
66c97f1
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
c208d26
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
17cb1d6
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
7f2c396
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
ba7e8ca
Update docker-compose.yml
AutomationGeek-dev Mar 22, 2021
59cc77a
Update docker-compose.yml
AutomationGeek-dev Mar 22, 2021
12e5270
Update docker-compose.yml
AutomationGeek-dev Mar 22, 2021
421c74f
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
8562b76
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
ffab29c
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
acc5cf2
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
595a8b8
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
129918d
Create service.yml
AutomationGeek-dev Mar 22, 2021
b298118
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
c67a412
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
61a87e6
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
a6f3400
Create deployment.yml
AutomationGeek-dev Mar 22, 2021
7c94d01
Create apply.sh
AutomationGeek-dev Mar 22, 2021
18ed143
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
40ad364
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
59d391e
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
8c0191d
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
fbe2c1e
Update docker-compose.yml
AutomationGeek-dev Mar 22, 2021
fd686da
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
4872d42
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
bd2d248
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
fa3c6bf
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
b62b354
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
3d8ae52
Update service.yml
AutomationGeek-dev Mar 22, 2021
3b6b43e
Update deployment.yml
AutomationGeek-dev Mar 22, 2021
8018026
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
49958f3
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
f340210
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
b5af1fe
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
1b671e4
Update Semaphore configuration
AutomationGeek-dev Mar 22, 2021
2b30365
Update service.yml
AutomationGeek-dev Mar 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .semaphore/pipeline_2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
version: v1.0
name: Pipeline 2
agent:
machine:
type: e1-standard-2
os_image: ubuntu1804
blocks:
- name: Docker-login-pull
task:
jobs:
- name: docker-login
commands:
- 'echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin'
- 'docker pull $DOCKER_USERNAME/helloworld:$SEMAPHORE_WORKFLOW_ID'
secrets:
- name: Docker Secrets
- name: Deploy
task:
secrets:
- name: Docker Secrets
- name: Digital Ocean Secret
env_vars:
- name: CLUSTER_NAME
value: test-kubernetes
prologue:
commands:
- doctl auth init --access-token $DO_ACCESS_TOKEN
- 'doctl kubernetes cluster kubeconfig save "${CLUSTER_NAME}"'
- checkout
jobs:
- name: Canary Deployment
commands:
- chmod 600 ./apply.sh
- chmod a+x ./apply.sh
- kubectl apply -f manifests/service.yml
- './apply.sh manifests/deployment.yml helloworld-canary 1 '
- if kubectl get deployment helloworld-stable; then kubectl scale --replicas=1 deployment/helloworld-stable; fi
13 changes: 13 additions & 0 deletions .semaphore/pipeline_3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: v1.0
name: Pipeline 3
agent:
machine:
type: e1-standard-2
os_image: ubuntu1804
blocks:
- name: 'Block #1'
task:
jobs:
- name: 'Job #1'
commands:
- echo "job 1"
13 changes: 13 additions & 0 deletions .semaphore/pipeline_4.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: v1.0
name: Pipeline 4
agent:
machine:
type: e1-standard-2
os_image: ubuntu1804
blocks:
- name: 'Block #1'
task:
jobs:
- name: 'Job #1'
commands:
- echo "job 1"
32 changes: 32 additions & 0 deletions .semaphore/semaphore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
version: v1.0
name: Initial Pipeline
agent:
machine:
type: e1-standard-2
os_image: ubuntu1804
blocks:
- name: Hello world
task:
jobs:
- name: Build app
commands:
- 'echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin'
- checkout
- docker-compose build
- docker image ls
- 'docker tag hello-world:latest "$DOCKER_USERNAME"/helloworld:latest'
- 'docker tag hello-world:latest "$DOCKER_USERNAME"/helloworld:$SEMAPHORE_WORKFLOW_ID'
- 'docker push "$DOCKER_USERNAME"/helloworld:latest'
- 'docker push "$DOCKER_USERNAME"/helloworld:$SEMAPHORE_WORKFLOW_ID'
- docker images
secrets:
- name: Docker Secrets
promotions:
- name: Canary
pipeline_file: pipeline_2.yml
auto_promote:
when: (branch = 'setup-semaphore' OR tag =~ '^hotfix*') AND result = 'passed'
- name: Stable
pipeline_file: pipeline_3.yml
- name: Rollback
pipeline_file: pipeline_4.yml
22 changes: 22 additions & 0 deletions apply.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# apply a kubernetes manifest and wait for rollout
#
# usage:
# apply.sh manifest/DEPLOYMENT_FILE.yml DEPLOYMENT_NAME REPLICAS IMAGE
#
# example:
# apply.sh manifest/deployment.yml addressbook-stable 3 $DOCKER_USERNAME/semaphore-demo-cicd-kubernetes:latest
#

set -e

export manifest=$1
export deployment=$2
export replicas=$3
export img=$4

apply_tmp=$(mktemp)
cat $manifest | envsubst | tee $apply_tmp
kubectl apply -f $apply_tmp
kubectl rollout status -f $apply_tmp --timeout=120s
rm -f $apply_tmp
14 changes: 14 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: '3.7'

services:
hello-world:
image: hello-world
container_name: hello-world-container
build:
context: .
dockerfile: Dockerfile
ports:
- 5001:5000
environment:
#- FLASK_APP=app/__init__.py
- FLASK_ENV=development
25 changes: 25 additions & 0 deletions manifests/deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: $deployment
spec:
replicas: $replicas
selector:
matchLabels:
app: helloworld
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: helloworld
deployment: $deployment
spec:
imagePullSecrets:
- name: dockerhub
containers:
- name: hello-world-container
image: $DOCKER_USERNAME/helloworld:$SEMAPHORE_WORKFLOW_ID
10 changes: 10 additions & 0 deletions manifests/service.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Service
metadata:
name: helloworld-app
spec:
selector:
app: helloworld
ports:
- port: 80
targetPort: 5000