Hi! แแฎแแขแแ แฃแแ แคแแแแแแ (aka deploy preview, แแแแฎแแแแแก แแแแแแแชแแ) - แแก แแ แแก แแแจแแ, แ แแแแกแแช แแแแแแแแแฃแแแ แแ แ แแฎแแแแ แกแแแแแแกแขแ แ แคแแแแแแ, แแ แแแแ แแแแแแฃแแ pull แแแแฎแแแแ แฃแแแแแแฃแ URL-แแ. แจแแแแซแแแแ แจแแแแแฌแแแ แแฃแจแแแแก แแฃ แแ แ แแแแ แกแแฌแแ แแแ แแแ แแแแจแ; แคแฃแแฅแชแแ แจแแแซแแแแ แแฉแแแแแก แกแฎแแ แแ แแแ แแแแกแขแแแก แแ แแ แแแฃแฅแขแแก แกแแแชแแแแแกแขแแแก. แกแแแแ แแฅแแแ แแฃแจแแแแ pull-แแก แแแแฎแแแแแแ, แงแแแแแ แแฎแแแ commit แแแแแแแแ แ แแแแแแแแแ แซแแแแ แแแแแกแแแแก แฌแแแจแแแแ แแ แแฎแแแ แแแแแก แแฎแแแ แแแแแแแแแ แจแแแแแแแ. แแแแฎแแแแ แจแแแซแแแแ แแแฉแแแแก, แ แแแแกแแช แแฅแแแ แแแแแ แแแแแแ pull-แแก แแแแฎแแแแ แแแแแแ แคแแแแแแจแ. แแฅแแแ แแฆแแ แแญแแ แแแแแ แคแฃแแฅแชแแแแแก แคแแแแแแ, แแแแ แแ Kubernetes แ แแกแฃแ แกแแแ แแแแแ แแแแกแขแแ แจแแ.
แแแขแ แแฎแแขแแ แฃแแ แคแแแแแแแแแก แจแแกแแฎแแ
Kubernetes-แจแ แคแฃแแฅแชแแแแแก แแแแจแขแแแแแแแก แจแแฅแแแแก แแ แ-แแ แแ แแแแแแแ แกแแฎแแแแ แกแแแ แชแแก แแแแแงแแแแแแ. แแแแแแ, แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแ แแกแ แแแแแแงแฃแ แแแ:
kind: Namespace
apiVersion: v1
metadata:
name: habr-back-end
...
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: habr-back-end
spec:
replicas: 3
...
แคแฃแแฅแชแแแแแก แแแแจแขแแแแแกแแแแก, แกแแฎแแแแ แกแแแ แชแ แแฅแแแแแ แแแกแ แแแแแขแแคแแแแขแแ แแ (แแแแแแแแแ, pull แแแแฎแแแแแก แแแแแ แ) แแ แแแ แแแแฃแแ แกแแฎแแก แแ แแคแแฅแกแ/แแแกแขแคแแฅแกแ (แแแแแแแแแ, -pr-):
kind: Namespace
apiVersion: v1
metadata:
name: habr-back-end-pr-17
...
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: habr-back-end-pr-17
spec:
replicas: 1
...
แแแแแแแ แแแแฌแแ แ Kubernetes แแแแ แแขแแ แ (แแแแแแแชแแ, แ แแแแแกแแช แแฅแแก แฌแแแแแ แแแแกแขแแ แฃแ แ แแกแฃแ แกแแแแ),
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
แจแแแแซแแแแ แฌแแแแแแฎแแ, แแฃ แ แแแแ แฃแแแ แแแแแ แแแ แคแฃแแฅแชแแแแแก แแแแจแขแแแแแแ แแแแกแขแแ แจแ
แแแขแแแแชแแ
แแแแแ แจแแแฎแแแแ แขแแแแฃแ แ แแแแฎแแแแแก แกแแกแแชแแชแฎแแ แชแแแแก แฃแฌแงแแแขแ แแแขแแแ แแชแแแ (continuous integration
):
- แฉแแแ แแแงแแแแแ แแฎแแ แแแแแแแฃแแแแแก แคแแแแแแจแ.
- แแแแกแขแ แฃแฅแชแแแแ แขแแ แแแแ แแแแขแแ แแแ แแ/แแ แขแแกแขแแแ.
- Kubernetes pull-แแก แแแแฎแแแแแก แแแแคแแแฃแ แแชแแแแ แแฅแแแแแ แคแ แแแแก แแ แแก (แแแแแแแแแ, แแแกแ แแแแแ แ แฉแแกแแฃแแแ แแแ แจแแแแแแจแ).
- kubectl application-แแก แแแแแงแแแแแแ, แแแแคแแแฃแ แแชแแแแ แแแแขแแแ แแแแกแขแแ แก (แแแแแแแแแ).
- Pull แแแแฎแแแแ แแแแ แแแแแแแฃแแแ แแแแแแ แคแแแแแแจแ.
แกแแแแ แแฅแแแ แแฃแจแแแแ pull-แแก แแแแฎแแแแแแ, แงแแแแแ แแฎแแแ commit แแแแแแแแ แ แแแแแแแแแ แซแแแแ แแแแแกแแแแก แฌแแแจแแแแ แแ แแฎแแแ แแแแแก แแฎแแแ แแแแแแแแแ แจแแแแแแแ. แแแแ แแ แ แแแแกแแช pull แแแแฎแแแแ แแแแ แแแแแแแแ แแแแแแ แคแแแแแแจแ, แแจแแแแแแ แแฎแแแแ แซแแ แแแแแ แคแแแแแแ. แจแแแแแแ, แแแแแแแก, แ แแ แฉแแแ แฃแแแ แแแแแแแแฌแงแแ pull-แแก แแแแฎแแแแ แแ แแแกแ Kubernetes แ แแกแฃแ แกแแแ แฏแแ แแแแแ แแแแกแขแแ แจแแ.
แ แแแแ แแแแแแแงแแแแ
แแแแแแกแขแแแแ แแ แแ แแแฅแขแ แฅแแแแแ แแแชแแแฃแแ แแ แซแแแแแแ:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml
แจแแฅแแแแแ แคแแแแ แจแแแแแแ แจแแแแแ แกแแ แแ แแแแแแกแขแแแแ แแ แแแจแแแแแแ kubectl apply -f
:
apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
name: stale-feature-branch
spec:
namespaceSubstring: -pr-
afterDaysWithoutDeploy: 3
แแแ แแแแขแ แแก namespaceSubstring แกแแญแแ แแ แกแแฎแแแแ แกแแแ แชแแก แแแคแแแขแแ แ แกแฎแแ แกแแฎแแแแ แกแแแ แชแแแแ แแแแฎแแแแแก แแแแกแแฆแแแแ. แแแแแแแแแ, แแฃ แแแแกแขแแ แก แแฅแแก แจแแแแแแ แกแแฎแแแแแแก แกแแแ แชแ: habr-back-end
, habr-front-end
, habr-back-end-pr-17
, habr-back-end-pr-33
, แแแจแแ แฌแแจแแแก แแแแแแแแขแแแ แแฅแแแแแแ habr-back-end-pr-17
, habr-back-end-pr-33
.
แแแ แแแแขแ แแก AfterDaysWithoutDeploy แกแแญแแ แแ แซแแแแ แกแแฎแแแแแแก แกแแแ แชแแก แฌแแจแแ. แแแแแแแแแ, แแฃ แกแแฎแแแแ แกแแแ แชแ แจแแแฅแแแ 3 ะดะฝั 1 ัะฐั
แฃแแแ แแ แแแ แแแแขแ แ แแแฃแแแแแแก 3 ะดะฝั
, แแก แกแแฎแแแแ แกแแแ แชแ แฌแแแจแแแแ. แแก แแกแแแ แแฃแจแแแแก แกแแแแ แแกแแแ แ แแแแแ แแฃแแแแแ, แแฃ แกแแฎแแแแ แกแแแ แชแ แแฅแแแแแ 2 ะดะฝั 23 ัะฐัะฐ
แฃแแแ แแ แแแ แแแแขแ แ แแแฃแแแแแแก 3 ะดะฝั
, แแก แกแแฎแแแแ แกแแแ แชแ แแ แฌแแแจแแแแ.
แแ แแก แแแแแ แแ แแ แแแ แแแแขแ แ, แแก แแแกแฃแฎแแกแแแแแแแแ แแแแแ, แแฃ แ แแแแแแแ แฎแจแแ แแ แฃแแแ แกแแแแแ แแแก แงแแแแ แกแแฎแแแแ แกแแแ แชแ แแ แจแแแแแฌแแแก แแฆแแแแ แแแแแแแแแแก แแแ แแจแ - แจแแแแแฌแแแEveryMiutes. แแแแฃแแแกแฎแแแแแ แขแแแแ 30 ะผะธะฝััะฐะผ
.
แ แแแแ แแแแแแแก แแแแก แแฃแจแแแแ
แแ แแฅแขแแแแจแ แแแแญแแ แแแแแ:
docker แแแแแแ แแแฃแ แแแ แแแแจแ แแฃแจแแแแแกแแแแก.แแแแแแฃแแ แแแแแแแแ แแแแ แแแแ แแแก แแฃแแแ แแแขแแก แแแแกแขแแ แก.แแฃแแแฅแขแแ โ แแ แซแแแแแแก แฎแแแแก แแแขแแ แคแแแกแ แแแแกแขแแ แแก แแแ แแแแกแแแแก.
แฉแแแ แแแ แแแ แแฃแแแ แแแขแแก แแแแกแขแแ แก แแแแแแแแ แแแแ:
$ minikube start --vm-driver=docker
minikube v1.11.0 on Darwin 10.15.5
Using the docker driver based on existing profile.
Starting control plane node minikube in cluster minikube.
แฉแแแ แแแแฃแแแแแแ kubectl
แแแแฃแแแกแฎแแแแแ แแแแแแงแแแแ แแแแแแแแ แแแ แแแแกแขแแ แ:
$ kubectl config use-context minikube
Switched to context "minikube".
แฉแแแแขแแแ แแแ แแแแคแแแฃแ แแชแแแแ แฌแแ แแแแแแก แแแ แแแแกแแแแก:
$ curl https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/configs/production.yml > stale-feature-branch-production-configs.yml
แแแแแแแแ แฌแแ แแแแแแก แแแแคแแแฃแ แแชแแแแ แแแแคแแแฃแ แแ แแแฃแแแ แซแแแแ แกแแฎแแแแแแก แกแแแ แชแแก แจแแกแแแแฌแแแแแแ แแ แฉแแแแก แแฎแแแ แแแแฆแแแแฃแ แแแแกแขแแ แก แแ แแแแฉแแแ แแกแแแ, แฉแแแ แจแแแชแแแแ แแแ แแแแก แชแแแแแก IS_DEBUG
on true
. แแ แแแแจแแแแแแแแ แแแ แแแแขแ แ afterDaysWithoutDeploy
แแฎแแแแแแแแแจแ แแ แแแแฆแแแ แแ แกแแฎแแแแ แกแแแ แชแแแแ แแ แจแแแแฌแแแแแ แแฆแแแแแก แแแแแแแแแแแจแ แแแแแแแแแแก แแแ แแจแ, แแฎแแแแ แฅแแแกแขแ แแแแแก แฌแแ แแแฅแแแแกแแแแก (-pr-
).
แแฃ แแฅแแแ แฎแแ แ Linux
:
$ sed -i 's|false|true|g' stale-feature-branch-production-configs.yml
แแฃ แแฅแแแ แฎแแ แ macOS
:
$ sed -i "" 's|false|true|g' stale-feature-branch-production-configs.yml
แแ แแแฅแขแแก แแแกแขแแแแชแแ:
$ kubectl apply -f stale-feature-branch-production-configs.yml
แจแแแแฌแแแแ, แ แแ แ แแกแฃแ แกแ แแแแแฉแแแ แแแแกแขแแ แจแ StaleFeatureBranch
:
$ kubectl api-resources | grep stalefeaturebranches
NAME ... APIGROUP ... KIND
stalefeaturebranches ... feature-branch.dmytrostriletskyi.com ... StaleFeatureBranch
แฉแแแ แแแแแฌแแแแ, แ แแ แแแแ แแขแแ แ แแแแแฉแแแ แแแแกแขแแ แจแ:
$ kubectl get pods --namespace stale-feature-branch-operator
NAME ... STATUS ... AGE
stale-feature-branch-operator-6bfbfd4df8-m7sch ... Running ... 38s
แแฃ แแแแแฎแแแแแ แแแก แแฃแ แแแแแแก, แแก แแแแ แแ แแก แ แแกแฃแ แกแแแแก แแแกแแแฃแจแแแแแแแ StaleFeatureBranch
:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Operator Version: 0.0.1"}
...
... "msg":"Starting EventSource", ... , "source":"kind source: /, Kind="}
... "msg":"Starting Controller", ...}
... "msg":"Starting workers", ..., "worker count":1}
แแแแแแขแแแแแ แแแแก fixtures
(แแแ แแแแคแแแฃแ แแชแแแแ แแแแกแขแแ แฃแแ แ แแกแฃแ แกแแแแก แแแแแแแ แแแแกแแแแก) แ แแกแฃแ แกแแกแแแแก StaleFeatureBranch
:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/stale-feature-branch.yml
แแแแคแแแฃแ แแชแแแแ แแแฃแแแแแแก แกแแฎแแแแ แกแแแ แชแแก แซแแแแแแ แฅแแแกแขแ แแฅแแแแ -pr-
แแ แแฎแแ 1 ะผะธะฝััั
.:
apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
name: stale-feature-branch
spec:
namespaceSubstring: -pr-
afterDaysWithoutDeploy: 1
checkEveryMinutes: 1
แแแแ แแขแแ แแ แฃแแแกแฃแฎแ แแ แแแแ แแ แแก แจแแแแแฌแแแก แกแแฎแแแแแแก แกแแแ แชแแแแ:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Stale feature branch is being processing.","namespaceSubstring":"-pr-","afterDaysWithoutDeploy":1,"checkEveryMinutes":1,"isDebug":"true"}
แฃแชแแแแแ fixtures
, แ แแแแแแช แจแแแชแแแก แแ แกแแฎแแแแ แกแแแ แชแแก (project-pr-1
, project-pr-2
) แแ แแกแแแ deployments
, services
, ingress
, แแ แแกแ แจแแแแแ:
$ kubectl apply -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/first-feature-branch.yml -f https://raw.githubusercontent.com/dmytrostriletskyi/stale-feature-branch-operator/master/fixtures/second-feature-branch.yml
...
namespace/project-pr-1 created
deployment.apps/project-pr-1 created
service/project-pr-1 created
horizontalpodautoscaler.autoscaling/project-pr-1 created
secret/project-pr-1 created
configmap/project-pr-1 created
ingress.extensions/project-pr-1 created
namespace/project-pr-2 created
deployment.apps/project-pr-2 created
service/project-pr-2 created
horizontalpodautoscaler.autoscaling/project-pr-2 created
secret/project-pr-2 created
configmap/project-pr-2 created
ingress.extensions/project-pr-2 created
แฉแแแ แแแแแฌแแแแ, แ แแ แงแแแแ แแแแแ แฉแแแแแแแแแ แ แแกแฃแ แกแ แฌแแ แแแขแแแแ แจแแแฅแแแ:
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
NAME ... READY ... STATUS ... AGE
pod/project-pr-1-848d5fdff6-rpmzw ... 1/1 ... Running ... 67s
NAME ... READY ... AVAILABLE ... AGE
deployment.apps/project-pr-1 ... 1/1 ... 1 ... 67s
...
แแแแแแแแ แฉแแแ แแแ debug
, แกแแฎแแแแ แกแแแ แชแแแแ project-pr-1
ะธ project-pr-2
, แจแแกแแแแแแกแแ, แงแแแแ แกแฎแแ แ แแกแฃแ แกแ แแแฃแงแแแแแแแแ แฃแแแ แฌแแแจแแแแก แแแ แแแแขแ แแก แแแแแแแแกแฌแแแแแแก แแแ แแจแ afterDaysWithoutDeploy
. แแก แฉแแแก แแแแ แแขแแ แแก แแฃแ แแแแแแจแ:
$ kubectl logs stale-feature-branch-operator-6bfbfd4df8-m7sch -n stale-feature-branch-operator
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-1"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-1","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-1"}
... "msg":"Namespace should be deleted due to debug mode is enabled.","namespaceName":"project-pr-2"}
... "msg":"Namespace is being processing.","namespaceName":"project-pr-2","namespaceCreationTimestamp":"2020-06-16 18:43:58 +0300 EEST"}
... "msg":"Namespace has been deleted.","namespaceName":"project-pr-2"}
แแฃ แจแแแแแฌแแแแ แ แแกแฃแ แกแแแแก แฎแแแแแกแแฌแแแแแแแแก, แแกแแแ แกแขแแขแฃแกแจแ แแฅแแแแแแ Terminating
(แฌแแจแแแก แแ แแชแแกแ) แแ แฃแแแ แฌแแจแแแแ (แแ แซแแแแแแก แแแแแแแแแแ แชแแ แแแแแ).
$ kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-1 && kubectl get namespace,pods,deployment,service,horizontalpodautoscaler,configmap,ingress -n project-pr-2
...
แจแแแแซแแแแ แแแแแแแ แแ แจแแฅแแแแก แแ แแชแแกแ fixtures
แ แแแแแแฏแแ แแ แแ แแแ แฌแแฃแแแแ, แ แแ แแกแแแ แแแแแฆแแ แแ แ แฌแฃแแจแ.
แแแขแแ แแแขแแแแแ
แ แ แจแแแซแแแแ แแแแแแแแก แแแแ แแขแแ แแก แแแชแแแแ, แ แแแแแแช แแฃแจแแแแก แแแแกแขแแ แจแ? แแ แกแแแแแก แ แแแแแแแแ แแแแแแแ, แงแแแแ แแแแแแแ แแ แแกแ แฃแแงแแคแแแแ (แแ แแแแ แแแแแแแแแแแแแ แกแฃแแแแฅแขแฃแ แแ) แแ แงแแแแ แแแแแ แฌแงแแแขแก, แ แ แแ แแก แกแแฃแแแแแกแ แแแแแ แแขแฃแแ แแ แแแฅแขแแกแแแแก:
-
แคแฃแแฅแชแแแก แคแแแแแแแก แฌแแจแแ แซแแ แแแแแ แคแแแแแแแก แฃแฌแงแแแขแ แแแขแแแ แแชแแแก แจแแฅแแแแกแแก.
- แแแแกแแแแแก แแฅแแแ แฃแแแ แแชแแแแ, แแฃ แ แแแแแ pull-แแก แแแแฎแแแแ แแฎแแแ แจแแแฃแจแแแแแฃแ แแแแแแแฃแแแแแก. แแแแแแแแ แคแฃแแฅแชแแแก แคแแแแแแแก แกแแฎแแแแแแก แกแแแ แชแ แจแแแชแแแก pull-แแก แแแแฎแแแแแก แแแแแขแแคแแแแขแแ แก - แแแก แแแแแ แก, แแ แคแแแแแแแก แกแแฎแแแก, แแแแแขแแคแแแแขแแ แ แงแแแแแแแแก แฃแแแ แแงแแก แแแแแแแแฃแแ commit-แจแ.
- แกแแแแแแกแขแ แ แคแแแแแแแแแก แแจแแแแแ แแแ แฎแแ แฎแแแแ. แแแแแแแแแ, แแฅแแแ แแแฅแแ แจแแแแแแ แแขแแแแแ: แฉแแแแขแแแ แแแ แแ แแแฅแขแ, แแแฃแจแแแ แขแแกแขแแแ, แจแแฅแแแแแ แแ แแแฅแขแ, แแแแแแแแ แแแแแจแแแแ, แแแแแแแแแ แจแแขแงแแแแแแแแแ, แแแแกแฃแคแแแแแ แแแแ แแแแฎแแแแแก แคแฃแแฅแชแแแก แคแแแแแแ. แแฃ แจแแขแงแแแแแแแแแแก แแแแแแแแแกแแก build แแแ แฎแแ แฎแแแแ, แแฅแแแ แแแแแฌแแแ แฎแแแแ แฌแแจแแแแ แแแแกแขแแ แจแ แแ แกแแแฃแแ แงแแแแ แ แแกแฃแ แกแ.
- แกแแแแแแแ แแแแขแแฅแกแขแแก แแแ แแจแ, แแแฎแแกแแแแแแแแก แขแแขแแแแก แฌแแจแแ แกแแแแแแกแขแ แ แแแแแแแแแจแ แแจแแแ แ แแ แแ แแก.
-
แแแแฐแฃแแแแแก แแแแแงแแแแแ (
แแแแแแแแแ ).- แแก แจแแแซแแแแ แแ แแงแแก แแฅแแแแ แแแแแแแ. แแแแแแแแแ, in
Jenkins , แแแแกแแแแแแก แแฎแแแแ แแ แแ แขแแแ แแฎแแ แก แฃแญแแ แก แแแกแ แแแแคแแแฃแ แแชแแแแแก แกแแฌแงแแก แแแแจแ แจแแแแฎแแแก แจแแกแแซแแแแแแแแก. แแแแฐแฃแแแแแก แแแแแงแแแแแแกแแก, แแฅแแแ แฃแแแ แแแฌแแ แแ แแฅแแแแ แกแแแฃแแแ แ แกแแ แแแขแ แแแ แแแกแแแฃแจแแแแแแแ. แแก แกแแ แแแขแ แฃแแแ แแแแแแแกแแแก แฏแแแแแแกแแก แแแขแแ แคแแแกแจแ, แ แแแแแก แจแแแแ แฉแฃแแแแ แ แแฃแแแ.
- แแก แจแแแซแแแแ แแ แแงแแก แแฅแแแแ แแแแแแแ. แแแแแแแแแ, in
-
แแแฌแแ แแ
แแ แแแฏแแแ แแ แแแแแแขแแ Kubernetes แแแแกแขแแ แ.- แแ แแแก แแแฎแแ แฏแแ แฌแแ แแกแ แแ แแฎแแ แแแญแแ แแแ.
- แแแแ แแขแแ แ แฃแแแ แแฃแจแแแแก แแกแแแแก แกแขแแแจแ, แแ แแก แแแแฃแแแแขแแ แแแฃแแ แแ แแฎแแ แแแญแแ แแแ.
แแแแแแแแ แกแขแแขแแแกแแแแ แงแฃแ แแแฆแแแแกแแแแก.
แฌแงแแ แ: www.habr.com