parent
fa51bd7346
commit
f6232364e3
39
.drone.sh
Executable file
39
.drone.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
# set -x
|
||||||
|
|
||||||
|
# echo "--------------------------"
|
||||||
|
# echo "--- export ---"
|
||||||
|
# export
|
||||||
|
# echo "--- env ---"
|
||||||
|
# env
|
||||||
|
# echo "--- set ---"
|
||||||
|
# set
|
||||||
|
# echo "--------------------------"
|
||||||
|
|
||||||
|
# only execute this script as part of the pipeline.
|
||||||
|
[ -z "$CI" ] && ( echo "I am not running in Drone CI"; exit 2; )
|
||||||
|
|
||||||
|
# only execute the script when the client key and certificate exist.
|
||||||
|
[ -z "$KUB_KEY" ] && ( echo "I need kub_key secret"; exit 3; )
|
||||||
|
[ -z "$KUB_CRT" ] && ( echo "I need kub_crt secret"; exit 4; )
|
||||||
|
|
||||||
|
# only execute the script when the CA certificate is present.
|
||||||
|
[ -z "$KUB_CA" ] && ( echo "I need kub_ca"; exit 5; )
|
||||||
|
|
||||||
|
# write the client key and the certificate
|
||||||
|
echo -n "$KUB_KEY" > /root/kub.key
|
||||||
|
chmod 600 /root/kub.key
|
||||||
|
echo -n "$KUB_CRT" > /root/kub.crt
|
||||||
|
|
||||||
|
# write the Kubernetes CA
|
||||||
|
echo -n "$KUB_CA" > /root/ca.crt
|
||||||
|
|
||||||
|
# check whether the certificate is signed by the CA
|
||||||
|
# TODO: (install openssl ? ) openssl verify -CAfile /root/ca.crt /root/kub.crt && ( echo "kub_crt is not signed by kub_ca"; exit 6; )
|
||||||
|
|
||||||
|
# Configure the cluster and the context
|
||||||
|
kubectl config set-credentials arno --client-certificate=/root/kub.crt --client-key=/root/kub.key
|
||||||
|
kubectl config set-cluster kubernetes --server=https://k8s.nixaid.com:6443 --certificate-authority=/root/ca.crt
|
||||||
|
kubectl config set-context kub-context --cluster=kubernetes --namespace=arno --user=arno
|
28
.drone.yml
Normal file
28
.drone.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
pipeline:
|
||||||
|
publish:
|
||||||
|
# image: plugins/docker:17.10
|
||||||
|
image: docker.nixaid.com:5010/plugins/docker:17.12
|
||||||
|
# privileged: true -- rather pass DRONE_ESCALATE=docker.nixaid.com:5010/plugins/docker:17.12 to a Drone server
|
||||||
|
registry: docker.nixaid.com:5010
|
||||||
|
repo: docker.nixaid.com:5010/andrey01/rainloop
|
||||||
|
# repo: andrey01/rainloop
|
||||||
|
tag:
|
||||||
|
- 1.11.3
|
||||||
|
- latest
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
secrets: [ docker_username, docker_password ]
|
||||||
|
when:
|
||||||
|
event: [ push, tag ]
|
||||||
|
|
||||||
|
kubectl:
|
||||||
|
image: docker.nixaid.com:5010/andrey01/kubectl:1.9.1
|
||||||
|
pull: true # always pull the image
|
||||||
|
secrets: [ kub_key, kub_crt, kub_ca ]
|
||||||
|
commands:
|
||||||
|
- "sh .drone.sh"
|
||||||
|
- "kubectl --context=kub-context version"
|
||||||
|
- "kubectl --context=kub-context get pods"
|
||||||
|
- "kubectl --context=kub-context replace --force -f k8s/"
|
||||||
|
- "sleep 3"
|
||||||
|
- "kubectl --context=kub-context get pods"
|
||||||
|
# XXX - kubectl --context=kub-context patch deployment testapp1 -p '{"spec":{"template":{"spec":{"containers":[{"name":"testapp1","image":"andrey01/testapp1:latest"}]}}}}'
|
42
DRONE.md
Normal file
42
DRONE.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Drone CI
|
||||||
|
|
||||||
|
- Registry cannot be removed if it has https:// in its name #2341
|
||||||
|
|
||||||
|
https://github.com/drone/drone/issues/2341
|
||||||
|
|
||||||
|
https://discourse.drone.io/t/unable-to-delete-registry-from-repository/943
|
||||||
|
|
||||||
|
## Limitations
|
||||||
|
|
||||||
|
- Drone DIND would always reuse cached docker images which could lead to the image leak across the private repos;
|
||||||
|
|
||||||
|
- Drone runs plugins/drone in privileged mode despite the repo does not have Trusted: true nor privileged: true [ref](https://github.com/drone-plugins/drone-docker/issues/170)
|
||||||
|
|
||||||
|
- Registry cannot be removed if it has https:// in its name #2341
|
||||||
|
https://github.com/drone/drone/issues/2341
|
||||||
|
https://discourse.drone.io/t/unable-to-delete-registry-from-repository/943
|
||||||
|
|
||||||
|
- Builds history cannot be removed (could lead to info leaks)
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
- Set the Registry creds in your Drone repo
|
||||||
|
|
||||||
|
```
|
||||||
|
Error response from daemon: Get https://docker.nixaid.com:5010/v2/plugins/docker/manifests/17.12: no basic auth credentials
|
||||||
|
```
|
||||||
|
|
||||||
|
- Make sure plugins/drone is running in a privileged mode, by passing DRONE_ESCALATE=custom-docker-registry.com:5010/plugins/docker to the Drone server installation.
|
||||||
|
|
||||||
|
- https://discourse.drone.io/t/plugins-docker-cannot-pull-when-image-repo-set-to-the-same-custom-docker-registry/1748
|
||||||
|
- https://github.com/drone-plugins/drone-docker/issues/170
|
||||||
|
|
||||||
|
```
|
||||||
|
environment:
|
||||||
|
DOCKER_LAUNCH_DEBUG: 'true'
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
+ /usr/local/bin/dockerd -g /var/lib/docker
|
||||||
|
time="2018-02-11T21:13:26Z" level=fatal msg="Error authenticating: exit status 1"
|
||||||
|
```
|
26
k8s/deployment.yaml
Normal file
26
k8s/deployment.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
kind: Deployment
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
metadata:
|
||||||
|
name: rainloop
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: rainloop
|
||||||
|
spec:
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regsecret
|
||||||
|
containers:
|
||||||
|
- name: rainloop
|
||||||
|
# command: ["sleep", "3600"]
|
||||||
|
image: docker.nixaid.com:5010/andrey01/rainloop:1.11.3
|
||||||
|
imagePullPolicy: Always
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /opt/rainloop/data
|
||||||
|
name: rainloop
|
||||||
|
# rainloop also mounts /var/log/rainloop to a docker volume
|
||||||
|
volumes:
|
||||||
|
- name: rainloop
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: rainloop
|
22
k8s/ingress.yml
Normal file
22
k8s/ingress.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: rainloop
|
||||||
|
annotations:
|
||||||
|
ingress.kubernetes.io/rewrite-target: /
|
||||||
|
kubernetes.io/ingress.class: "nginx"
|
||||||
|
kubernetes.io/tls-acme: "true"
|
||||||
|
ingress.kubernetes.io/proxy-body-size: 2g
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: "webmail.nixaid.com"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
serviceName: rainloop
|
||||||
|
servicePort: 80
|
||||||
|
path: /
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- webmail.nixaid.com
|
||||||
|
secretName: webmail-nixaid-com-tls
|
11
k8s/service.yaml
Normal file
11
k8s/service.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
kind: Service
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: rainloop
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: rainloop
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 8080
|
12
k8s/storage.yaml
Normal file
12
k8s/storage.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: rainloop
|
||||||
|
spec:
|
||||||
|
storageClassName: cinder
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
volumeName: rainloop
|
Loading…
Reference in New Issue
Block a user