ืื! ืฉืืจืื ืฆืืืืึทื (ืึทืงืึท ืืืคึผืืื ืคืึธืจืืืกืืงืข ืืืืึทืืื ื, ืึธืคึผืฉืึทืฆืื ื ืึทืคึผ) - ืืึธืก ืืื ืืืขื ื ืื ืืืืื ืื ืืขื ืฆืืืืึทื ืืื ืืืคึผืืืื, ืึธืืขืจ ืืืื ืืขืืขืจ ืฆืืขื ืืขืื ืฆื ืึท ืืื ืฆืืง URL. ืืืจ ืงืขื ืขื ืงืึธื ืืจืึธืืืจื ืฆื ืื ืงืึธื ืึทืจืืขื ืืื ืึท ืคึผืจืึธืืืงืฆืืข ืกืืืืืืข, ืื ืฉืืจืื ืงืขื ืขื ืืืื ืืขืืืืื ืฆื ืื ืืขืจืข ืคึผืจืึธืืืจืึทืืขืจื ืึธืืขืจ ืคึผืจืึธืืืงื ืกืคึผืขืฉืึทืืึทืกืฅ. ืืฉืขืช ืืืจ ืึทืจืืขื ืืื ืึท ืฆืืขื ืืขืื, ืืขืืขืจ ื ืืึท ืืืขืจืืขืื ืงืจืึทื ื ืฆืขืืืืงืืขื ืคึฟืึทืจ ืื ืึทืื ืงืึธื ืืื ืืืืกืืขืืขืงื, ืืื ืื ื ืืึทืข ืฆืขืืืืงืืขื ืคึฟืึทืจ ืื ื ืืึทืข ืงืึธื ืืื ืจืึธืืื ืืืืก. ืคึฟืจืืื ืงืขื ืืืืคืฉืืืื ืืืขื ืืืจ ืฆืื ืืืคืืืกื ืึท ืฆืืขื ืืขืื ืืื ืื ืืขื ืฆืืืืึทื. ืืืจ ื ืื ืืขืจ ืืึทืจืคึฟื ืื ืฉืืจืื ืฆืืืืึทื, ืึธืืขืจ ืื Kubernetes ืจืขืกืืจืกื ืืขื ืขื ื ืึธื ืืื ืืขื ืงื ืืื.
ืืขืจ ืืืขืื ืฉืืจืื ืฆืืืืืื
ืืืื ืฆืืืึทื ื ืฆื ืืึทืื ืฉืืจืื ืฆืืืืืื ืืื Kubernetes ืืื ืฆื ื ืืฆื ื ืึธืืขื ืกืคึผืืืกืึทื. ืืื ืงืืจืฅ, ืื ืคึผืจืึธืืืงืฆืืข ืงืึทื ืคืืืืขืจืืืฉืึทื ืงืืงื ืืื ืืึธืก:
kind: Namespace
apiVersion: v1
metadata:
name: habr-back-end
...
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: habr-back-end
spec:
replicas: 3
...
ืคึฟืึทืจ ืึท ืฉืืจืื ืฆืืืืึทื, ืึท ื ืึทืืขืกืคึผืึทืกืข ืืื ืืืฉืืคื ืืื ืืืื ืืืืขื ืืืืขื (ืืืฉื, ืื ืฆืืขื ืืขืื ื ืืืขืจ) ืืื ืึท ืืื ืคืื ืคึผืจืขืคืืงืก / ืคึผืึธืกืืคืืงืก (ืืืฉื, -ืคึผืจ-):
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
...
ืืื ืึทืืืขืืืื, ืืื ืืขืฉืจืืื ืงืืืขืจื ืขืืขืก ืึธืคึผืขืจืึทืืึธืจ (ืึทื ืึทืคึผืืึทืงืืืฉืึทื ืืืึธืก ืืื ืึทืงืกืขืก ืฆื ืงื ืืื ืจืขืกืืจืกื),
$ kubectl get pods --all-namespaces | grep -e "-pr-"
NAMESPACE ... AGE
habr-back-end-pr-264 ... 4d8h
habr-back-end-pr-265 ... 5d7h
ืืืจ ืงืขื ื ืืืืขื ืขื ืืืขืื ืืื ืฆื ืื ืกืืจืืืขื ื ืฉืืจืื ืฆืืืืืื ืืื ืึท ืงื ืืื
ืืึธืืืึทืืืืืฉืึทื
ืืึธืืืจ ืงืืงื ืืื ืึท ืืืคึผืืฉ ืืืืคืกืืืง ืคืื ืฆืืขื ืืขืื ืืื ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื (continuous integration
):
- ืืืจ ืฉืืืคึผื ืึท ื ืืึท ืืืขืจืืขืื ืฆื ืื ืฆืืืืึทื.
- ืืืืฃ ืื ืืืืขื, ืืื ืืขืจื ืืื / ืึธืืขืจ ืืขืกืฅ ืืขื ืขื ืืืืคื.
- ืงืืืขืจื ืขืืขืก ืฆืืขื ืืขืื ืงืึทื ืคืืืืขืจืืืฉืึทื ื ืืขื ืขื ืืืฉืขื ืขืจืืืืึทื ืืืืฃ ืื ืคืืืขื (ืืืฉื, ืืืึทื ื ืืืขืจ ืืื ืื ืกืขืจืืึทื ืืื ืื ืคืึทืจืืืง ืืืกืืขืจ).
- ื ืืฆื kubectl ืึทืคึผืืืื, ืงืึทื ืคืืืืขืจืืืฉืึทื ื ืืขื ืขื ืืืกืืฃ ืฆื ืื ืงื ืืื (ืฆืขืืืืงืืขื).
- ืฆืืขื ืืขืื ืืื ืืขืจืืืฉื ืืื ืื ืืขื ืฆืืืืึทื.
ืืฉืขืช ืืืจ ืึทืจืืขื ืืื ืึท ืฆืืขื ืืขืื, ืืขืืขืจ ื ืืึท ืืืขืจืืขืื ืงืจืึทื ื ืฆืขืืืืงืืขื ืคึฟืึทืจ ืื ืึทืื ืงืึธื ืืื ืืืืกืืขืืขืงื, ืืื ืื ื ืืึทืข ืฆืขืืืืงืืขื ืคึฟืึทืจ ืื ื ืืึทืข ืงืึธื ืืื ืจืึธืืื ืืืืก. ืืืขืจ ืืืขื ืึท ืฆืืขื ืืขืื ืืื ืืขืจืืืฉื ืืื ืื ืืขื ืฆืืืืึทื, ื ืึธืจ ืื ืืขื ืฆืืืืึทื ืืืขื ืืืื ืืขืืืื. ืืื ืึท ืจืขืืืืืึทื, ืขืก ืืืจื ืก ืืืืก ืึทื ืืืจ ืืึธืื ืฉืืื ืคืืจืืขืกื ืืืขืื ืื ืฆืืขื ืืขืื, ืืื ืืืึทื 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
ืคึผืึทืจืึทืืขืืขืจ 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
.
ืคึผืึทืจืึทืืขืืขืจ afterDaysWithoutDeploy ืืืจืฃ ืฆื ืืืกืืขืงื ืึทืื ื ืึธืืขื ืกืคึผืืืกืึทื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืื ื ืึทืืขืกืคึผืึทืกืข ืืื ืืืฉืืคื 3 ะดะฝั 1 ัะฐั
ืฆืืจืืง, ืืื ืืขืจ ืคึผืึทืจืึทืืขืืขืจ ืื ืืืงืืืฅ 3 ะดะฝั
, ืืขื ื ืึธืืขื ืคึผืืึทืฅ ืืืขื ืืืขืจื ืืืืกืืขืืขืงื. ืขืก ืืืื ืึทืจืืขื ืืื ืื ืคืึทืจืงืขืจื ืจืืืืื ื ืืืื ืื ื ืึทืืขืกืคึผืึทืกืข ืืื ืืืฉืืคื 2 ะดะฝั 23 ัะฐัะฐ
ืฆืืจืืง, ืืื ืืขืจ ืคึผืึทืจืึทืืขืืขืจ ืื ืืืงืืืฅ 3 ะดะฝั
, ืืขื ื ืึธืืขื ืคึผืืึทืฅ ืืืขื ื ืื ืืืื ืืืืกืืขืืขืงื.
ืขืก ืืื ื ืึธื ืืืื ืคึผืึทืจืึทืืขืืขืจ, ืขืก ืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืืื ืึธืคื ืฆื ืืืขืจืงืืงื ืึทืืข ื ืึทืืขืกืคึผืึทืกืขืก ืืื ืืฉืขืง ืคึฟืึทืจ ืืขื ืึธื ืืืคึผืืืืืึทื ื - ืืฉืขืง ืืขืืขืจ ืืื ืื. ืืืจื ืคืขืืืงืืึทื ืขืก ืืื ืืืืึทื 30 ะผะธะฝััะฐะผ
.
ืืื ืขืก ืืืึธืจืงืก
ืืื ืคืืจ, ืืืจ ืืืขื ืืึทืจืคึฟื:
ืืึธืงืงืขืจ ืคึฟืึทืจ ืืจืืขืื ืืื ืึทื ืืคืืขืืื ืืขืจื ืกืืืืืืข.ืืื ืืงืืืข ืืืขื ืืึทืคึผื ืึท ืงืืืขืจื ืขืืขืก ืงื ืืื ืืึธืืงืึทืื.kubectl - ืืึทืคึฟืขืื ืฉืืจื ืฆืืืื ื ืคึฟืึทืจ ืงื ืืื ืคืึทืจืืืึทืืืื ื.
ืืืจ ืืึทืคึผื ืึท ืงืืืขืจื ืขืืขืก ืงื ืืื ืืึธืืงืึทืื:
$ 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
ืืืืฃ 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
ืขืืืขืืข ืืึธื ืืื ืืึทืื ืืืืขืจ ืึทื ืืื ืืขื ืขื ืึทืืืขืงืืขื ืืืขื ืืื ืึท ืืื ืื.
ืึทืืืขืจื ืึทืืืืืขืก
ืืืึธืก ืงืขื ืขื ืืืื ืืขืืื ืึทื ืฉืืึธื ืคืื ืึท ืึธืคึผืขืจืึทืืึธืจ ืืืึธืก ืึทืจืืขื ืืื ืึท ืงื ืืื? ืขืก ืืขื ืขื ืขืืืขืืข ืึทืคึผืจืึธืืืฉืื, ืึทืืข ืคืื โโืืื ืืขื ืขื ืืืคึผืขืจืคืืงื (ืืื ืืืืขืจ ืฉืึธืจืืงืึธืืื ืืก ืืขื ืขื ืกืึทืืืืฉืขืงืืืื), ืืื ืึทืืขืืขื ืืืกืืืื ืคึฟืึทืจ ืืื ืืืึธืก ืืื ืืขืกืืขืจ ืคึฟืึทืจ ืึท ืืึทืืื ืืขืจ ืคึผืจืืืขืงื:
-
ืืืกืืขืงื ืฉืืจืื ืฆืืืืึทื ืืขืฉืึทืก ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื ืืืืขื ืคืื ืืขื ืฆืืืืึทื.
- ืฆื ืืึธื ืืึธืก, ืืืจ ืืึทืจืคึฟื ืฆื ืืืืกื ืืืึธืก ืฆืืขื ืืขืื ืฉืืื ืฆื ืื ืืืขืจืืขืื ืืืึธืก ืืื ืืขืืืื. ืืื ื ืื ืฉืืจืื ืฆืืืืึทื ื ืึทืืขืกืคึผืึทืกืข ืึผืืื ืื ืฆืืขื ืืขืื ืืืขื ืืืคืืขืจ - ืืืื ื ืืืขืจ, ืึธืืขืจ ืื ื ืึธืืขื ืคืื ืื ืฆืืืืึทื, ืื ืืืืขื ืืืืขื ืืืขื ืฉืืขื ืืืง ืืืื ืกืคึผืขืกืืคืืขื ืืื ืื ืืืขืจืืขืื.
- ืืึทืกืืขืจ ืฆืืืืึทื ืืืืขื ืืขื ืขื ืคืืืืื ื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืจ ืืึธืื ืื ืคืืืืขื ืืข ืกืืึทืืขืก: ืืจืืคืงืืคืืข ืื ืคึผืจืืืขืงื, ืืืืคื ืืขืกืฅ, ืืืืขื ืื ืคึผืจืืืขืงื, ืืึทืื ืึท ืืขืืืื ื, ืฉืืงื ื ืึธืืืึทืคืึทืงืืืฉืึทื ื, ืืืกืืขืงื ืื ืฉืืจืื ืฆืืืืึทื ืคืื ืื ืืขืฆืืข ืฆืืขื ืืขืื. ืืืื ืื ืืืืขื ืคืืืื ืืืขื ืืืจ ืฉืืงื ืึท ืึธื ืืึธื, ืืืจ ืืืขื ืืึธืื ืฆื ืืืกืืขืงื ืึทืืข ืจืขืกืืจืกื ืืื ืืขื ืงื ืืื ืืึทื ืืืึทืื.
- ืึธื ืืขืืขืจืืง ืงืึธื ืืขืงืกื, ืืืืืืื ื ืฉืืจืื ืฆืืืืืื ืืื ืื ืืขื ืืืืขื ืืื ื ืืฉื ืงืืึธืจ ืืื ืืขืจ ืืึธื.
-
ื ืืฆื ืืืขืืืึธืึธืงืก (
ืืืึทืฉืคึผืื ).- ืืึธืก ืงืขื ื ืืฉื ืืืื ืืืื ืฆืืืึทื ื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื
ืืืฉืขื ืงืื ืก , ืืืืื ืืืื ืืืคึผ ืคืื ืจืขืจื - ืืื ืืข ืฉืืืฆื ืื ืคืืืืงืืื ืฆื ืจืึทืืขืืืขื ืืืึทื ืงืึทื ืคืืืืขืจืืืฉืึทื ื ืืื ืื ืืงืืจ ืงืึธื. ืืืขื ืืืจ ื ืืฆื ืืืขืืืึธืึธืงืก, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืจืืึทืื ืืืื ืืืืืขื ืข ืฉืจืืคื ืฆื ืคึผืจืึธืฆืขืก ืืื. ืืขื ืฉืจืืคื ืืืขื ืืืื ืืขืฉืืขืื ืืื ืื Jenkins ืฆืืืื ื, ืืืึธืก ืืื ืฉืืืขืจ ืฆื ืืืึทื ืขื.
- ืืึธืก ืงืขื ื ืืฉื ืืืื ืืืื ืฆืืืึทื ื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื
-
ืฆื ืฉืจืืืื
Cronjob ืืื ืืืืื ืึท ืงืืืขืจื ืขืืขืก ืงื ืืื.- ืกืคึผืขื ืืื ื ืฆืืื ืืืืฃ ืฉืจืืืื ืืื ืฉืืืฆื.
- ืืขืจ ืึธืคึผืขืจืึทืืึธืจ ืฉืืื ืึทืจืืขื ืืื ืึท ืขื ืืขื ื ืืกื, ืืื ืืึทืงืืืืขื ืืึทื ืืื ืืขืฉืืืฆื.
ืืื ืง ืืืจ ืคึฟืึทืจ ืืืื ืืคืืขืจืงืืึทืืงืืื ืฆื ืืขื ืึทืจืืืงื.
ืืงืืจ: www.habr.com