áá±áá¹áá¬ááŸáá·áºááŒá¬ážááá¯ááºáá«á! á¡ááºá¹áá«áááºáá¬áááœá² (aka deploy previewá review app) - á€áááºááŸá¬ áá¬á áá¬áá¬áááœá²ááᯠá¡áá¯á¶ážááŒá¯áá¯á¶áá¬áááá² áá®ážááŒá¬áž URL áá áºáá¯áá®ááá¯á· ááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá áºáá¯á á®ááá¯áá« áá¯ááºáá±á¬ááºááá·áºá¡áá«ááŒá áºáááºá áá¯ááºááẠáá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááœáẠá¡áá¯ááºáá¯ááºááŒááºážááŸááááŸá á á áºáá±ážááá¯ááºáááºá á¡ááºá¹áá«áááºááᯠá¡ááŒá¬ážáááá¯ááááºáá¬áá»á¬áž ááá¯á·ááá¯áẠáá¯ááºáá¯ááºáá»áœááºážáá»ááºáá°áá»á¬ážááá¯á· ááŒáááá¯ááºáááºá áááºááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááœáẠáá¯ááºáá±á¬ááºáá±áá»áááºááœááºá áá¯ááºáá±á¬ááºážá¡ááœáẠáááºááŸáá¡áá¯á¶ážááŒá¯ááŸá¯á¡áá áºáá áºáá¯á á®ááá¯ááºážááᯠáá»ááºááá¯ááºááŒá®ážá áá¯ááºá¡áá áºá¡ááœáẠááŒáá·áºáá»ááºá¡áá áºááᯠáá¯ááºáá±ážáá«áááºá áááºááá¬áááœá²ááá¯á· ááœá²áá°áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááᯠáá±á«ááºážá ááºááá¯ááºáá±á¬á¡áá«ááœáẠáá±ážááœááºážáá»á¬áž ááœááºáá±á«áºáá¬ááá¯ááºáááºá áááºááẠá¡ááºá¹áá«áááºáá¬áááœá²ááᯠáááá¯á¡ááºáá±á¬á·áá±á¬áºáááºáž Kubernetes áááºážááŒá áºáá»á¬ážááẠá¡á á¯á¡áá±ážááœáẠááŸááá±áá±ážáááºá
á¡ááºá¹áá«áááºá¡ááá¯ááºážá¡áááºáá»á¬ážá¡ááŒá±á¬ááºáž áá±á¬ááºáááº
Kubernetes ááœááºá¡ááºá¹áá«áááºá¡ááá¯ááºážá¡áááºáá»á¬ážááŒá¯áá¯ááºáááºáááºážáááºážáá áºáá¯ááŸá¬ namespaces ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒá áºáááºá á¡ááá¯áá»á¯ááºá¡á¬ážááŒáá·áºá áá¯ááºáá¯ááºááŸá¯ááœá²á·á ááºážáá¯á¶ááẠá€áá²á·ááá¯á·ááŒá áºáááº-
kind: Namespace
apiVersion: v1
metadata:
name: habr-back-end
...
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: habr-back-end
spec:
replicas: 3
...
á¡ááºá¹áá«áááºáá¬áááœá²áá áºáá¯á¡ááœááºá namespace ááᯠáááºážá identifier (á¥ááá¬á ááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá¶áá«ááº) ááŸáá·áº prefix/postfix á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯á· (á¥ááá¬á -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 ááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá¯á¶á á¶áá»á¬ážááᯠá¡ááŒááºáá¯ááºáá±ážááẠ(á¥ááá¬á áááºážááá¶áá«ááºááᯠááŒá®ážááŒá±á¬ááºááá·áºáá¯á¶á á¶áá²ááá¯á· ááá·áºááœááºážáá¬ážáááº)á
- kubectl ááá¯á¡áá¯á¶ážááŒá¯á configurations áá»á¬ážááᯠcluster ááœááºáá±á«ááºážááá·áºááẠ(deploy)á
- Pull Request ááᯠáá¬á áá¬áá¬áááœá²ááá¯á· áá±á«ááºážááá·áºáááºá
áááºááẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááœáẠáá¯ááºáá±á¬ááºáá±áá»áááºááœááºá áá¯ááºáá±á¬ááºážá¡ááœáẠáááºááŸáá¡áá¯á¶ážááŒá¯ááŸá¯á¡áá áºáá áºáá¯á á®ááá¯ááºážááᯠáá»ááºááá¯ááºááŒá®ážá áá¯ááºá¡áá áºá¡ááœáẠááŒáá·áºáá»ááºá¡áá áºááᯠáá¯ááºáá±ážáá«áááºá ááá¯á·áá±á¬áº ááœá²áááºááŸá¯áá±á¬ááºážááá¯ááŸá¯ááᯠáá¬á áá¬ááá¯ááºážá¡áááºááá¯á· áá±á«ááºážá ááºážááá¯ááºáá±á¬á¡áá«á áá¬á áá¬ááá¯ááºážá¡áááºáá áºáá¯áᬠáááºáá±á¬ááºáááºááŒá áºáááºá ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááœá²áá¯ááºááẠáá±á¬ááºážááá¯áá»ááºááᯠáá±á·áá¬ážááŒá®ážááŒá áºááŒá±á¬ááºážááŸáá·áº áááºážá Kubernetes áááºážááŒá áºáá»á¬ážááẠá¡á á¯á¡áá±ážááœáẠááŸááá±áá±ážáááºá
áááºááá¯áá¯á¶ážá áœá²ááá¯á·
á¡á±á¬ááºáá±á¬áºááŒáá« command ááŒáá·áº project ááᯠinstall áá¯ááºáá«á
$ 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
parameter ááẠnamespace Substring á¡ááŒá¬áž namespace áá»á¬ážá០ááœá²áá°áá±á¬ááºážááá¯ááŸá¯áá»á¬áž á¡ááœáẠnamespace áá»á¬ážááᯠá
á
áºáá¯ááºááẠááá¯á¡ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡á
á¯á¡áá±ážááœáẠá¡á±á¬ááºáá«á¡áááºáá±áá¬áá»á¬áž ááŸááá»áŸááº- 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
.
parameter ááẠAfterdaysWithoutDeploy áá¬áááºáá±á¬ááºážáá»á¬ážááᯠáá»ááºááẠááá¯á¡ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá namespace ááá¯áááºáá®ážáá²á·áá»áŸáẠ3 ÐŽÐœÑ 1 ÑаÑ
áá±á¬ááºááŒá±á¬ááºážááŸáá·áº parameter ááá¯ááœáŸááºááŒáááºá 3 ÐŽÐœÑ
á€á¡áááºáá±áá¬ááᯠáá»ááºááá¯ááºáá«áááºá namespace ááá¯áááºáá®ážáá«á ááá·áºáá»ááºááẠáŠážáááºáá»ááºááœááºáááºáž á¡áá¯ááºáá¯ááºáá«áááºá 2 ÐŽÐœÑ 23 ÑаÑа
áá±á¬ááºááŒá±á¬ááºážááŸáá·áº parameter ááá¯ááœáŸááºááŒáááºá 3 ÐŽÐœÑ
ဠnamespace ááᯠáá»ááºáááºááá¯ááºáá«á
áá±á¬ááºááẠááá·áºáááºáá»ááºáá
áºáá¯ááŸááá«áááºá áááºáá»áŸááŒá¬ááŒá¬ á
áááºááºáááºáᬠááŒáá·áºáá»ááºááŒááºážáááŒá¯áá² áááºáá±á«ááºážáá»á¬ážá
áœá¬ á
á
áºáá±ážááẠáá¬áááºááŸááááº- áááá
áºááá¯ááºáž á
á
áºáá±ážáá«á. áá¯á¶ááŸááºá¡á¬ážááŒáá·áº áááºážááẠáááºážáá°ááŒá
áºáááºá 30 ЌОМÑÑаЌ
.
áááºááá¯á€áá¯ááºáááºážááá¯áááº
áááºááœá±á·ááœááºáááºááá¯á¡ááºáááá·áºáááº-
Docker áá®ážááŒá¬ážáááºáááºážáá»ááºááœáẠá¡áá¯ááºáá¯ááºáááºááá®áá®áá°áá® Kubernetes á¡á á¯á¡áá±ážááᯠá ááºááœááºážááœáẠááŒáŸáá·áºáááºáá«áááºákubectl â á¡á á¯á¡áá±ážá á®áá¶ááá·áºááœá²ááŸá¯á¡ááœáẠcommand line interfaceá
áá»áœááºá¯ááºááá¯á·ááẠáá±áááœááºážááœáẠKubernetes á¡á á¯á¡áá±ážáá áºáá¯ááᯠááŒá¯á á¯áá»áá¯ážáá±á¬ááºáááº-
$ 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
áá°áááºážá¡á¬ážááŒáá·áº local cluster ááá¯áá¯á¶ážáá«-
$ 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
áá¯ááºáá¯ááºááŸá¯ááœá²á·á
ááºážáá¯á¶áá»á¬ážááẠáá±á¬ááºážááœááºážáá±áá±á¬ namespace áá»á¬ážááá¯á
á
áºáá±ážááẠá
á®á
ááºáááºááŸááºáá¬ážááŒá®ážá áá»áœááºá¯ááºááá¯á·áá¡áá
áºáááºáá¬ážáá±á¬á¡á
á¯á¡áá±ážááœáẠáááºážááá¯á·áááŸááá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯á¡á¬áž á¡á
á¬ážááá¯ážáá«áááºá IS_DEBUG
á¡áá±á«áº true
. á€áááºááá¯ážááŒáá·áº parameter ááᯠ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
ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶áá»á¬ážááẠá
á¬áááºážááœá²áá
áºáá¯ááŒáá·áº namespaces ááá¯ááŸá¬ááœá±áááºááœáŸááºááŒáááºá -pr-
ááá« 1 ЌОМÑÑÑ
.:
apiVersion: feature-branch.dmytrostriletskyi.com/v1
kind: StaleFeatureBranch
metadata:
name: stale-feature-branch
spec:
namespaceSubstring: -pr-
afterDaysWithoutDeploy: 1
checkEveryMinutes: 1
á¡á±á¬áºááá±áá¬á០áá¯á¶á·ááŒááºááŒá®áž namespace áá»á¬ážááᯠá á áºáá±ážááẠá¡ááá·áºááŒá áºáá±áá«ááŒá®-
$ 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
namespaces ááŸá
áºáá¯áá«áááºááẠ(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
, namespaces project-pr-1
О project-pr-2
ááá¯á·ááŒá±á¬áá·áº parameter ááá¯ááá·áºááœááºážááŒááºážáááŸááá²á¡ááŒá¬ážá¡áááºážá¡ááŒá
áºá¡á¬ážáá¯á¶ážááá¯áá»ááºáá»ááºážáá»ááºáá
áºááááá·áºáááºá 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
(deletion process) ááá¯á·ááá¯áẠáá»ááºááŒá®ážááŒá
áºááẠ(command output is empty)á
$ 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
á¡ááŒáááºáá±á«ááºážáá»á¬ážá
áœá¬ááŸáá·áº áááºážááá¯á·ááᯠáá
áºáááá
áºá¡ááœááºáž áááºááŸá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á
á±á
á¡ááŒá¬ážáááºážáááºáž
á¡á á¯á¡ááœá²á·áá áºáá¯ááœáẠá¡áá¯ááºáá¯ááºáá±á¬ á¡á±á¬áºááá±áá¬á¡á á¬áž áá¬áá¯ááºááá¯ááºááááºážá áá»ááºážáááºáááºážáá»á¬ážá áœá¬ááŸááá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠáá á¯á¶áááºááŒááẠ(áááºážááá¯á·á áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááẠáá¯áá¹áááááá¹áá¬ááºááŒá áºáááº)á áá°ááá¯ááºážááẠááá±á¬áá»ááºáá áºáá¯á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážááᯠáá°á·ááá¯ááºáá° áá¯á¶ážááŒááºááŒáááº-
-
áá¬á áá¬á¡ááá¯ááºážá¡áááºááᯠá ááºáááºáááŒáẠáá±á«ááºážá ááºáááºáá±á¬ááºáá±á áẠá¡ááºá¹áá«áááºáá¬áááœá²ááᯠáá»ááºáá«á
- áá«ááá¯áá¯ááºááá¯á·á áááºááœá²áááºáá±á¬ááºážááá¯áá»ááºá áááºáá±á¬ááºáá±áááºááá¯áá²á· áááááááºáá²á· áááºááá¯ááºáááºááá¯áá¬ááᯠááááá¯á·ááá¯áá«áááºá á¡ááºá¹áá«áááºáá¬áááœá² namespace ááœáẠááœá²áá°áá±á¬ááºážááá¯ááŸá¯ identifier áá«ááŸáááẠ- áááºážááá¶áá«áẠááá¯á·ááá¯áẠáá¬áááœá²áá¡áááºááŒá áºáá±á¬ááŒá±á¬áá·áºá identifier ááᯠcommit ááœáẠá¡ááŒá²áááºážáááºááŸááºáá¬ážááá«áááºá
- Master áá¬áááœá²áááºáá±á¬ááºááŸá¯ áá»ááºááœááºáá±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááá·áºááœáẠá¡á±á¬ááºáá«á¡ááá·áºáá»á¬áž ááŸááááº- ááá±á¬áá»ááºááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«á á ááºážáááºááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºáááºá ááá±á¬áá»ááºááᯠáááºáá±á¬ááºáá«á áá¯ááºáá±áááºá á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáá»á¬áž áá±ážááá¯á·áá«á áá±á¬ááºáá¯á¶ážááœá²áááºáá±á¬ááºážááá¯ááŸá¯á á¡ááºá¹áá«áááºáá¬áááœá²ááᯠááŸááºážáááºážáá«á á¡ááŒá±á¬ááºážááŒá¬ážá á¬áá±ážááá¯á·áá¬ááœáẠáááºáá±á¬ááºááŸá¯ áá¡á±á¬ááºááŒááºáá«áá á¡á á¯á¡ááœá²á·á¡ááœááºážááŸá á¡áááºážá¡ááŒá áºá¡á¬ážáá¯á¶ážááᯠááá¯ááºááá¯ááºáá»ááºááá«áááºá
- ááá·áºáá»á±á¬áºáá±á¬á¡ááŒá±á¬ááºážá¡áá¬áááŸááá²á master build ááŸáá¡ááºá¹áá«áááºá¡ááá¯ááºážá¡áááºáá»á¬ážááá¯áá»ááºááŒááºážáááºáááºááŸá¬ážáááºááá¯ááºáá«á
-
áááºáá»áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºáž (
ááá°áᬠ).- áá«á áááºážáá²á· áá»ááºážáááºááŸá¯ ááá¯ááºáá°ážá á¥ááá¬á¡á¬ážááŒáá·áºá
Jenkins á ááá¯ááºááá¯ááºážá¡áá»áá¯ážá¡á á¬ážáá áºáá¯áááºážá á¡áááºážá¡ááŒá áºáá¯ááºááœáẠáááºážáááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠááááºážáááºážááá¯ááºááŸá¯ááᯠáá¶á·ááá¯ážáá±ážáá«áááºá webhooks ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á áááºážááá¯á·ááá¯áá¯ááºáá±á¬ááºááẠááá·áºááá¯ááºááá¯áẠscript ááá¯áá±ážáááºááá¯á¡ááºáááºá ááááºážááááºážáááºáááºáá²áá±á¬ á€áá¬ááºááœáŸááºážááᯠJenkins interface ááœáẠááá·áºááœááºážááááºááŒá áºáááºá
- áá«á áááºážáá²á· áá»ááºážáááºááŸá¯ ááá¯ááºáá°ážá á¥ááá¬á¡á¬ážááŒáá·áºá
-
áá±ážáá¬áž
Cronjob ááŸáá·áº Kubernetes á¡á á¯á¡áá±ážáá áºáá¯ááᯠááá·áºáá«á- á á¬áá±ážááŒááºážáá²á· áá±á¬ááºáá¶á·ááŒááºážá¡ááœáẠá¡áá»áááºááŒá¯ááºážáá«á
- á¡á±á¬áºááá±áá¬ááẠá¡áá¬ážáá°áá¯á¶á á¶ááŒáá·áº á¡áá¯ááºáá¯ááºáá±ááŒá®ážá ááŸááºáááºážáááºáá¬ážááŒá®áž áá¶á·ááá¯ážáá¬ážáááºá
áá±á¬ááºážáá«ážááᯠá¡á¬áá¯á¶á
áá¯ááºááŸá¯á¡ááœáẠáá»á±ážáá°ážáááºáá«áááºá
source: www.habr.com