Ready
This commit is contained in:
parent
665f8a87c0
commit
df47c21265
22
.drone.yml
22
.drone.yml
@ -65,6 +65,28 @@ steps:
|
|||||||
- yq '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/clean_appset.yaml > /tmp/new_appset.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
|
- kubectl apply -f /tmp/new_appset.yaml
|
||||||
|
|
||||||
|
- name: Deploy a main ApplicationSet
|
||||||
|
image: alpine/k8s:1.24.10
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
environment:
|
||||||
|
KUBECONFIG_CONTENT:
|
||||||
|
from_secret: KUBECONFIG_CONTENT
|
||||||
|
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'`
|
||||||
|
- export ARGO_APP_BRANCH=$DRONE_BRANCH
|
||||||
|
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
|
||||||
|
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/old_appset.yaml
|
||||||
|
- yq "del(.spec.generators[].list.elements[] | select(.name == \"$ARGO_APP_BRANCH\"))" /tmp/old_appset.yaml > /tmp/clean_appset1.yaml
|
||||||
|
- yq "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/clean_appset1.yaml > /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
|
||||||
|
|
||||||
- name: Sync application
|
- name: Sync application
|
||||||
image: argoproj/argocd
|
image: argoproj/argocd
|
||||||
environment:
|
environment:
|
||||||
|
@ -376,6 +376,49 @@ And now let's create a job like that:
|
|||||||
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
|
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
|
||||||
```
|
```
|
||||||
|
|
||||||
And the last step would be to remove an application when branch is removed.
|
And the last step would be to remove an application when branch is removed. It could be easy with `Gitlab` because there you can use `environments` and `triggers` for removing branch *(as I remember)* But with drone it can be harder. Because drone won't be triggered by a removed branch. So I has to be an additional step for the `main` pipeline.
|
||||||
|
|
||||||
|
I'm always using squash commits that means that after merging a Pull Request the commit will have the same `SHA`. So when merging to the main branch, I can use the commit hash to remove a generator.
|
||||||
|
|
||||||
|
So I've created a file `./kube/main-template.yaml`, that looks like that:
|
||||||
|
```YAML
|
||||||
|
- name: application
|
||||||
|
app: badhouseplants
|
||||||
|
branch: main
|
||||||
|
chart_version: $ARGO_APP_CHART_VERSION
|
||||||
|
value: |
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: $ARGO_APP_IMAGE_TAG
|
||||||
|
```
|
||||||
|
|
||||||
|
And a job:
|
||||||
|
```YAML
|
||||||
|
- name: Deploy a main ApplicationSet
|
||||||
|
image: alpine/k8s:1.24.10
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
environment:
|
||||||
|
KUBECONFIG_CONTENT:
|
||||||
|
from_secret: KUBECONFIG_CONTENT
|
||||||
|
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'`
|
||||||
|
- export ARGO_APP_BRANCH=$DRONE_BRANCH
|
||||||
|
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
|
||||||
|
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/old_appset.yaml
|
||||||
|
- yq "del(.spec.generators[].list.elements[] | select(.name == \"$ARGO_APP_BRANCH\"))" /tmp/old_appset.yaml > /tmp/clean_appset1.yaml
|
||||||
|
- yq "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/clean_appset1.yaml > /tmp/clean_appset.yaml
|
||||||
|
- envsubst < ./kube/main.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
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Then I just need to upgrade `./kube/template.yaml`, so it contains `commit_sha: $ARGO_APP_IMAGE_TAG`.
|
||||||
|
|
||||||
|
> Also, I've found out that `ArgoCD` won't remove a namespace if it was created by a `SyncPolicy`, so I've added it to the helm chart, and add a new `value` to provide a name.
|
||||||
|
|
||||||
> Also, I've found out that `ArgoCD` won't remove a namespace if it was created by a `SyncPolicy`, so I've added it to the helm chart, and add a new `value` to provide a name.
|
|
8
kube/main.yaml
Normal file
8
kube/main.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
- name: application
|
||||||
|
app: badhouseplants
|
||||||
|
branch: $ARGO_APP_BRANCH
|
||||||
|
chart_version: $ARGO_APP_CHART_VERSION
|
||||||
|
value: |
|
||||||
|
hugo:
|
||||||
|
image:
|
||||||
|
tag: $ARGO_APP_IMAGE_TAG
|
@ -1,6 +1,7 @@
|
|||||||
- name: $ARGO_APP_BRANCH
|
- name: $ARGO_APP_BRANCH
|
||||||
app: badhouseplants
|
app: badhouseplants
|
||||||
branch: $ARGO_APP_BRANCH
|
branch: $ARGO_APP_BRANCH
|
||||||
|
commit_sha: $ARGO_APP_IMAGE_TAG
|
||||||
chart_version: $ARGO_APP_CHART_VERSION
|
chart_version: $ARGO_APP_CHART_VERSION
|
||||||
value: |
|
value: |
|
||||||
namespace:
|
namespace:
|
||||||
|
Reference in New Issue
Block a user