blob: 1ec1aa60d88644a8321f37faf0a371903a2fb2d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# This is a pre-release of a Helm 2to3 migration template to facilitate
# the migration of Auto DevOps releases to Helm 3.
#
# To use, set the CI variable MIGRATE_HELM_2TO3 to "true".
# For more details, go to https://docs.gitlab.com/ee/topics/autodevops/upgrading_auto_deploy_dependencies.html#helm-v3
.helm-2to3-migrate:
image: registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image/releases/helm-2to3-2.17.0-3.5.3-kube-1.16.15-alpine-3.12
# NOTE: We use the deploy stage because:
# - It exists in all versions of Auto DevOps.
# - It is _empty_.
# - It precedes any Kubernetes deployments.
# Users on older versions of GitLab can include this template without adjusting their stages.
stage: deploy
needs: []
artifacts:
when: always
expire_in: 1 week
paths:
- helm-2-release-backups/
before_script:
- mkdir helm-2-release-backups
- apk add jq
- export TILLER_NAMESPACE=$KUBE_NAMESPACE
- export HELM_HOST="localhost:44134"
- nohup tiller -listen "${HELM_HOST}" >tiller.log 2>&1 &
- helm2 init --client-only
script:
# check for releases
- releases=$(helm2 ls --output json | jq -r '.Releases[].Name')
# back up entire namespace if the user opts into it
- |
if [[ -n "$releases" && -n "$BACKUP_HELM2_RELEASES" ]]; then
echo "Backing up releases"
kubectl get configmap -n "$KUBE_NAMESPACE" -l "OWNER=TILLER" -o yaml > "helm-2-release-backups/$KUBE_NAMESPACE.yaml"
fi
# adopt manifests from each release
- |
for release in $releases; do
chart=$(helm2 ls "^$release\$" --output json | jq -r '.Releases[0].Chart')
echo "Adopting Helm v2 manifests from $release"
# some resource kinds must be listed explicitly https://github.com/kubernetes/kubernetes/issues/42885
for name in $(kubectl -n "$KUBE_NAMESPACE" get all,ingress,daemonset -o name -l chart="$chart"); do
kubectl annotate -n "$KUBE_NAMESPACE" --overwrite "$name" meta.helm.sh/release-name="$release"
kubectl annotate -n "$KUBE_NAMESPACE" --overwrite "$name" meta.helm.sh/release-namespace="$KUBE_NAMESPACE"
kubectl label -n "$KUBE_NAMESPACE" --overwrite "$name" app.kubernetes.io/managed-by=Helm
done
done
# migrate each release
- |
for release in $releases; do
echo "Migrating release: $release"
helm3 2to3 convert --ignore-already-migrated --release-storage configmaps --tiller-out-cluster --tiller-ns "$TILLER_NAMESPACE" "$release"
done
.helm-2to3-cleanup:
image: registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image/releases/helm-2to3-2.17.0-3.5.3-kube-1.16.15-alpine-3.12
stage: cleanup
environment:
action: prepare
before_script:
- export TILLER_NAMESPACE=$KUBE_NAMESPACE
- export HELM_HOST="localhost:44134"
- nohup tiller -listen "${HELM_HOST}" >tiller.log 2>&1 &
- helm2 init --client-only
script:
- helm3 2to3 cleanup --skip-confirmation --release-storage configmaps --tiller-out-cluster --tiller-ns "$TILLER_NAMESPACE"
.review:
environment:
name: review/$CI_COMMIT_REF_NAME
rules:
- if: '$MIGRATE_HELM_2TO3 != "true"'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: never
- if: '$REVIEW_DISABLED'
when: never
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
when: manual
review:helm-2to3:migrate:
extends: [.review, .helm-2to3-migrate]
review:helm-2to3:cleanup:
extends: [.review, .helm-2to3-cleanup]
rules:
- if: '$MIGRATE_HELM_2TO3 != "true" && $CLEANUP_HELM_2TO3 == null'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: never
- if: '$REVIEW_DISABLED'
when: never
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
when: manual
.staging:
environment:
name: staging
rules:
- if: '$MIGRATE_HELM_2TO3 != "true"'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
when: never
- if: '$STAGING_ENABLED'
when: manual
staging:helm-2to3:migrate:
extends: [.staging, .helm-2to3-migrate]
staging:helm-2to3:cleanup:
extends: [.staging, .helm-2to3-cleanup]
rules:
- if: '$MIGRATE_HELM_2TO3 != "true" && $CLEANUP_HELM_2TO3 == null'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
when: never
- if: '$STAGING_ENABLED'
when: manual
.production:
environment:
name: production
rules:
- if: '$MIGRATE_HELM_2TO3 != "true"'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: manual
production:helm-2to3:migrate:
extends: [.production, .helm-2to3-migrate]
production:helm-2to3:cleanup:
extends: [.production, .helm-2to3-cleanup]
rules:
- if: '$MIGRATE_HELM_2TO3 != "true" && $CLEANUP_HELM_2TO3 == null'
when: never
- if: '$CI_KUBERNETES_ACTIVE == null || $CI_KUBERNETES_ACTIVE == ""'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: manual
|