Test drone
This commit is contained in:
parent
87fef49572
commit
9abae62035
23
.drone.yml
23
.drone.yml
@ -42,6 +42,29 @@ steps:
|
|||||||
repo: git.badhouseplants.net/allanger/badhouseplants-net
|
repo: git.badhouseplants.net/allanger/badhouseplants-net
|
||||||
tags: ${DRONE_COMMIT_SHA}
|
tags: ${DRONE_COMMIT_SHA}
|
||||||
|
|
||||||
|
- name: Deploy a preview ApplicationSet
|
||||||
|
image: alpine/k8s
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
exclude:
|
||||||
|
- main
|
||||||
|
environment:
|
||||||
|
KUBECONFIG_CONTENT:
|
||||||
|
from_secret: KUBECONFIG_CONTENT
|
||||||
|
ARGO_APP_BRANCH: ${DRONE_BRANCH}
|
||||||
|
ARGO_APP_HOSTNAME: "${DRONE_BRANCH}-dev.badhouseplants.net"
|
||||||
|
ARGO_APP_IMAGE_TAG: ${DRONE_COMMIT_SHA}
|
||||||
|
commands:
|
||||||
|
- mkdir $HOME/.kube
|
||||||
|
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
|
||||||
|
- apk update --no-cache && apk add yq gettext
|
||||||
|
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'
|
||||||
|
- kubectl get -f applicationset.yaml -o yaml > /tmp/old_appset.yaml
|
||||||
|
- yq 'del(.spec.generators[].list.elements[] | select(.name == ""))' /tmp/old_application.set > /tmp/clean_appset.yaml
|
||||||
|
- envsubst < ./kube/template.yaml > /tmp/elements.yaml
|
||||||
|
- yq '.spec.generators[].list.elements + load("/tmp/elements.yaml")' /tmp/clean_appset.yaml > /tmp/new_appset.yaml
|
||||||
|
- kubectl apply -f /tmp/new_appset.yaml
|
||||||
|
|
||||||
---
|
---
|
||||||
# ----------------------------------------------
|
# ----------------------------------------------
|
||||||
# -- Upload a newer version of my CV
|
# -- Upload a newer version of my CV
|
||||||
|
@ -199,3 +199,126 @@ WORKDIR /src
|
|||||||
COPY . /src
|
COPY . /src
|
||||||
RUN hugo
|
RUN hugo
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### How to deploy
|
||||||
|
|
||||||
|
Previously I was using the same helmfile that I use for everything else in my k8s cluster. It was fine for static envs, but when I need to deploy them dynamically, it's not an option anymore. And here `ArgoCD` enters the room. I'm creating an `ApplicationSet` that looks like that:
|
||||||
|
```YAML
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: ApplicationSet
|
||||||
|
metadata:
|
||||||
|
name: badhouseplants-net
|
||||||
|
namespace: argo-system
|
||||||
|
spec:
|
||||||
|
generators:
|
||||||
|
- list:
|
||||||
|
elements:
|
||||||
|
- name: application # just not to lose a backward compability with the prevouos setup
|
||||||
|
app: badhouseplants
|
||||||
|
branch: main
|
||||||
|
chart_version: 0.3.6
|
||||||
|
# Image that is lates now, we'll get there later
|
||||||
|
value: |
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: latest
|
||||||
|
# And this is an example of environemnt that I want to be created.
|
||||||
|
- name: dynamic-charts
|
||||||
|
app: badhouseplants
|
||||||
|
branch: dynamic-charts
|
||||||
|
chart_version: 0.3.6
|
||||||
|
value: |
|
||||||
|
istio:
|
||||||
|
hosts:
|
||||||
|
- dynamic-charts-dev.badhouseplants.net
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: 5d742a71731320883db698432303c92aee4d68a1
|
||||||
|
baseURL: https://dynamic-charts-dev.badhouseplants.net/
|
||||||
|
buildDrafts: true
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
name: "{{ app }}-{{ name }}"
|
||||||
|
namespace: argo-system
|
||||||
|
spec:
|
||||||
|
project: "default"
|
||||||
|
source:
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- values.yaml
|
||||||
|
values: "{{ value }}"
|
||||||
|
repoURL: https://git.badhouseplants.net/api/packages/allanger/helm
|
||||||
|
targetRevision: "{{ chart_version }}"
|
||||||
|
chart: badhouseplants-net
|
||||||
|
destination:
|
||||||
|
server: "https://kubernetes.default.svc"
|
||||||
|
namespace: "{{ app }}-{{ name }}"
|
||||||
|
syncPolicy:
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
But storing I don't like an idea of storing something like that in the repository. So in the git I'm putting something like that.
|
||||||
|
```YAML
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: ApplicationSet
|
||||||
|
metadata:
|
||||||
|
name: badhouseplants-net
|
||||||
|
namespace: argo-system
|
||||||
|
spec:
|
||||||
|
generators:
|
||||||
|
- list:
|
||||||
|
elements:
|
||||||
|
- name: application
|
||||||
|
app: badhouseplants
|
||||||
|
branch: main
|
||||||
|
chart_version: 0.3.6
|
||||||
|
value: |
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: $ARGO_IMAGE_TAG
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
Since I'm not using latest anymore, I need to add use a new tag every time a new image is pushed. But let's test with the preview env first:
|
||||||
|
```YAML
|
||||||
|
# ./kube/template.yaml
|
||||||
|
...
|
||||||
|
- name: $ARGO_APP_BRANCH
|
||||||
|
app: badhouseplants
|
||||||
|
branch: $ARGO_APP_BRANCH
|
||||||
|
chart_version: $ARGO_APP_CHART_VERSION
|
||||||
|
value: |
|
||||||
|
istio:
|
||||||
|
hosts:
|
||||||
|
- $ARGO_APP_HOSTNAME
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: $ARGO_APP_IMAGE_TAG
|
||||||
|
baseURL: https://$ARGO_APP_HOSTNAME/
|
||||||
|
buildDrafts: true
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
And the logic that I would like to have in my setup would be
|
||||||
|
- In the git repo there is only application set with the main instance only (production)
|
||||||
|
- After a new image is pushed to registry, I'm getting this application set as `yaml` and appending new generator to it.
|
||||||
|
- Applying a new `ApplicationSet` and syncing application using the `argo` cli tool
|
||||||
|
|
||||||
|
First, let's set environment variables:
|
||||||
|
```
|
||||||
|
- $ARGO_APP_BRANCH = $DRONE_BRANCH | I don't want to use it directly, in case if I want to stop using Drone
|
||||||
|
- $ARGO_APP_CHART_VERSION should be taken from the `./chart/Chart.yaml` file. `cat chart/Chart.yaml | yq '.version'`
|
||||||
|
- $ARGO_APP_HOSTNAME, I want it to look like that: "$DRONE_BRANCH-dev.badhouseplants.net"
|
||||||
|
- $ARGO_APP_IMAGE_TAG = $DRONE_COMMIT_SHA
|
||||||
|
```
|
||||||
|
|
||||||
|
So after setting all these variables, I can use `envsubst < ./kube/template.yaml` to create a correct generator. After that I only need to append it to one that is already in k8s. *And not to append if it's already there*.
|
||||||
|
|
||||||
|
So let's design out pipeline:
|
||||||
|
|
||||||
|
1. Get an application set is currently deployed to k8s
|
||||||
|
```BASH
|
||||||
|
kubectl get application-set
|
||||||
|
```
|
||||||
|
Reference in New Issue
Block a user