เดนเดฒเต! เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเต (เด เดคเดพเดฏเดคเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเด เดชเตเดฐเดฟเดตเตเดฏเต, เดฑเดฟเดตเตเดฏเต เดเดชเตเดชเต) - เดเดคเต เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดฎเตเดชเตเตพ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด เดเดฐเต เด เดฆเตเดตเดฟเดคเตเดฏ URL-เดฒเตเดฏเตเดเตเดเดพเดฃเต. เดเดฐเต เดชเตเดฐเตเดกเดเตเดทเตป เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดเตเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเตเดฏเตเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเด; เดซเตเดเตเดเตผ เดฎเดฑเตเดฑเต เดชเตเดฐเตเดเตเดฐเดพเดฎเตผเดฎเดพเตผเดเตเดเต เดเตฝเดชเตเดชเดจเตเดจ เดธเตเดชเตเดทเตเดฏเดฒเดฟเดธเตเดฑเตเดฑเตเดเตพเดเตเดเต โโเดเดพเดฃเดฟเดเตเดเดพเดจเดพเดเตเด. เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดชเดดเดฏ เดเตเดกเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฐเต เดชเตเดคเดฟเดฏ เดเดฎเตเดฎเดฟเดฑเตเดฑเต เดเดฑเดจเตเดฑเต เดกเดฟเดชเตเดฒเตเดฏเตเด เดเดฒเตเดฒเดพเดคเดพเดเตเดเดชเตเดชเตเดเตเด, เดชเตเดคเดฟเดฏ เดเตเดกเดฟเดจเดพเดฏเดฟ เดชเตเดคเดฟเดฏ เดตเดฟเดจเตเดฏเดพเดธเด เดชเตเดฑเดคเตเดคเดฟเดฑเดเตเดเตเด. เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเดฟเดฒเตเดเตเดเต เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ เดเตเดฆเตเดฏเดเตเดเตพ เดเดฏเตผเดจเตเดจเตเดเตเดเดพเด. เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเดฟ เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเต เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเดฑเดตเดฟเดเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเดพเดฃเต.
เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเตเดเดณเตเดเตเดเตเดฑเดฟเดเตเดเต เดเตเดเตเดคเตฝ
เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเดฟเตฝ เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเตเดเตพ เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดธเดฎเตเดชเดจเด เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต. เดเตเดฐเตเดเตเดเดคเตเดคเดฟเตฝ, เดชเตเดฐเตเดกเดเตเดทเตป เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดคเตเดชเตเดฒเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต:
kind: Namespace
apiVersion: v1
metadata:
name: habr-back-end
...
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: habr-back-end
spec:
replicas: 3
...
เดเดฐเต เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเดฟเดจเดพเดฏเดฟ, เดเดฐเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เด เดคเดฟเดจเตเดฑเต เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเตเด (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดฎเตเดชเตผ) เดเดฟเดฒ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดฟเดซเดฟเดเตเดธเตเด/เดชเตเดธเตเดฑเตเดฑเตเดซเดฟเดเตเดธเตเด (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, -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
...
เดชเตเดคเตเดตเต, เดเดพเตป เดเดดเตเดคเดฟ เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ (เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดเตโเดธเดธเต เดเดณเตเดณ เดเดฐเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป),
$ 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 apply เดเดชเดฏเตเดเดฟเดเตเดเต, เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเดเตพ เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเตเดเตเดเต เดเตเตผเดเตเดเตเดจเตเดจเต (เดตเดฟเดจเตเดฏเดพเดธเด).
- เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเดฟเดฒเตเดเตเดเต เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดชเดดเดฏ เดเตเดกเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฐเต เดชเตเดคเดฟเดฏ เดเดฎเตเดฎเดฟเดฑเตเดฑเต เดเดฑเดจเตเดฑเต เดกเดฟเดชเตเดฒเตเดฏเตเด เดเดฒเตเดฒเดพเดคเดพเดเตเดเดชเตเดชเตเดเตเด, เดชเตเดคเดฟเดฏ เดเตเดกเดฟเดจเดพเดฏเดฟ เดชเตเดคเดฟเดฏ เดตเดฟเดจเตเดฏเดพเดธเด เดชเตเดฑเดคเตเดคเดฟเดฑเดเตเดเตเด. เดเดจเตเดจเดพเตฝ เดเดฐเต เดชเตเตพ เดฑเดฟเดเตเดตเดธเตเดฑเตเดฑเต เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเดฟเตฝ เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดชเตเดชเตเดเตเดเดฏเตเดณเตเดณเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดเตเดเตเดฑเดฟเดเตเดเต เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดฎเดฑเดจเตเดจเตเดตเตเดจเตเดจเตเด เด เดคเดฟเดจเตเดฑเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเดฑเดตเดฟเดเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเดพเดฃเตเดจเตเดจเตเด เดเดคเต เดฎเดพเดฑเตเดจเตเดจเต.
เดเดเตเดเดจเต เดเดชเดฏเตเดเดฟเดเตเดเดพเด
เดเตเดตเดเตเดฏเตเดณเตเดณ เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเด:
$ 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
.
เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ เดถเตเดทเดDays WithoutDeploy เดชเดดเดฏ เดจเตเดฏเดฟเดเดธเตเดชเตเดธเตเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดธเตเดทเตเดเดฟเดเตเดเดพเตฝ 3 ะดะฝั 1 ัะฐั
เดคเดฟเดฐเดฟเดเต, เดเดชเตเดชเด เดชเดฐเดพเดฎเตเดฑเตเดฑเตผ เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต 3 ะดะฝั
, เด เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเดชเตเดชเตเดเตเด. เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดฃเตเดเดพเดเตเดเดฟเดฏเดพเตฝ เด
เดคเต เดตเดฟเดชเดฐเตเดค เดฆเดฟเดถเดฏเดฟเดฒเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต 2 ะดะฝั 23 ัะฐัะฐ
เดคเดฟเดฐเดฟเดเต, เดเดชเตเดชเด เดชเดฐเดพเดฎเตเดฑเตเดฑเตผ เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต 3 ะดะฝั
, เด เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเดฟเดฒเตเดฒ.
เดเดฐเต เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ เดเตเดเดฟเดฏเตเดฃเตเดเต, เดเดฒเตเดฒเดพ เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเตเดเดณเตเด เดเดคเตเดฐ เดคเดตเดฃ เดธเตโเดเดพเตป เดเตเดฏเตเดฏเดฃเดฎเตเดจเตเดจเตเด เดตเดฟเดจเตเดฏเดพเดธเด เดเตเดเดพเดคเต เดฆเดฟเดตเดธเดเตเดเตพ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดฃเดฎเตเดจเตเดจเตเด เดเดคเต เดเดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฃเต - เดเดฐเต เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดฒเตเด เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด. เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดเดคเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต 30 ะผะธะฝััะฐะผ
.
เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ
เดชเตเดฐเดพเดฏเตเดเดฟเดเดฎเดพเดฏเดฟ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดคเต เดเดตเดถเตเดฏเดฎเดพเดฃเต:
เดกเตเดเตเดเตผ เดเดฑเตเดฑเดชเตเดชเตเดเตเด เด เดจเตเดคเดฐเตเดเตเดทเดคเตเดคเดฟเตฝ เดเตเดฒเดฟ เดเตเดฏเตเดคเดคเดฟเดจเต.เดฎเดฟเดจเดฟเดเตเดฏเตเดฌเต เดชเตเดฐเดพเดฆเตเดถเดฟเดเดฎเดพเดฏเดฟ เดเดฐเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเดฏเตผเดคเตเดคเตเด.เดเตเดฌเตเดเตเดฒเดฟ โ เดเตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเตเดเตเดฎเตเดจเตเดฑเดฟเดจเตเดณเตเดณ เดเดฎเดพเตปเดกเต เดฒเตเตป เดเดจเตเดฑเตผเดซเตเดธเต.
เดเดเตเดเตพ เดชเตเดฐเดพเดฆเตเดถเดฟเดเดฎเดพเดฏเดฟ เดเดฐเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเตผ เดตเดณเตผเดคเตเดคเตเดจเตเดจเต:
$ 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
เดจเดฟเดฐเดตเดงเดฟ เดคเดตเดฃ, เดเดฐเต เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เด
เดต เดจเตเดเตเดเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดฎเตเดจเตเดจเต เดเดฑเดชเตเดชเดพเดเตเดเตเด.
เดเดคเดฐเดฎเดพเตผเดเดเตเดเตพ
เดเดฐเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดเดชเตเดชเดฑเตเดฑเตเดฑเตผเดเตเดเต เดชเดเดฐเด เดเดจเตเดคเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเตเด? เดจเดฟเดฐเดตเดงเดฟ เดธเดฎเตเดชเดจเดเตเดเดณเตเดฃเตเดเต, เด เดตเดฏเตเดฒเตเดฒเดพเด เด เดชเตเตผเดฃเตเดฃเดฎเดพเดฃเต (เด เดตเดฏเตเดเต เดชเตเดฐเดพเดฏเตเดฎเดเตพ เดเดคเตเดฎเดจเดฟเดทเตเด เดฎเดพเดฃเต), เดเตเดเดพเดคเต เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเต เดเดฑเตเดฑเดตเตเด เดฎเดฟเดเดเตเดเดคเต เดเดจเตเดคเดพเดฃเตเดจเตเดจเต เดเดฒเตเดฒเดพเดตเดฐเตเด เดธเตเดตเดฏเด เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเต:
-
เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเดฟเดจเตเดฑเต เดคเตเดเตผเดเตเดเดฏเดพเดฏ เดธเดเดฏเตเดเดจ เดธเดฎเดฏเดคเตเดคเต เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด.
- เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดเดคเต เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจ เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดคเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเดเดคเตเดจเตเดจเต เดจเดฟเดเตเดเตพ เด เดฑเดฟเดฏเตเดฃเตเดเดคเตเดฃเตเดเต. เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเต เดจเตเดฏเดฟเดเดธเตโเดชเตเดฏเตโเดธเดฟเตฝ เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ - เด เดคเดฟเดจเตเดฑเต เดจเดฎเตเดชเตผ เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดฌเตเดฐเดพเดเตเดเดฟเดจเตเดฑเต เดชเตเดฐเต, เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดเดฒเตเดฒเดพเดฏเตเดชเตเดชเตเดดเตเด เดเดฎเตเดฎเดฟเดฑเตเดฑเดฟเตฝ เดตเตเดฏเดเตเดคเดฎเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต.
- เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดเตเดเต เดจเดฟเตผเดฎเตเดฎเดพเดฃเด เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดจเตเดจเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเดเตเดเตพเดเตเดเต เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเดเตเดเดเตเดเดณเตเดฃเตเดเต: เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเตเด, เดเตเดธเตเดฑเตเดฑเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเด, เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเด, เดฑเดฟเดฒเตเดธเต เดเตเดฏเตเดฏเตเด, เด เดฑเดฟเดฏเดฟเดชเตเดชเตเดเตพ เด เดฏเดฏเตเดเตเดเตเด, เด เดตเดธเดพเดจเดคเตเดคเต เดชเตเตพ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเดเต เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเต เดฎเดพเดฏเตโเดเตเดเตเด. เดเดฐเต เด เดฑเดฟเดฏเดฟเดชเตเดชเต เด เดฏเดฏเตโเดเตเดเตเดฎเตเดชเตเตพ เดฌเดฟเตฝเดกเต เดชเดฐเดพเดเดฏเดชเตเดชเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต เดเดฒเตเดฒเดพ เดเดฑเดตเดฟเดเดเตเดเดณเตเด เดจเดฟเดเตเดเตพ เดธเตเดตเดฎเตเดงเดฏเดพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต.
- เดถเดฐเดฟเดฏเดพเดฏ เดธเดจเตเดฆเตผเดญเดฎเดฟเดฒเตเดฒเดพเดคเต, เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเดฟเตฝเดกเดฟเดฒเต เดซเตเดเตเดเตผ เดฌเตเดฐเดพเดเตเดเตเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดจเตเดจเดคเต เดตเตเดฏเดเตเดคเดฎเดฒเตเดฒ.
-
เดตเตเดฌเตโเดนเตเดเตเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต (
เดเดฆเดพเดนเดฐเดฃเด ).- เดเดคเต เดจเดฟเดเตเดเดณเตเดเต เดธเดฎเตเดชเดจเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเดฟเดฒเตเดฒ. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเตป
เดเตเดเตเดเดฟเตปเดธเต , เดเดฐเต เดคเดฐเด เดชเตเดชเตเดชเตเดฒเตเตป เดฎเดพเดคเตเดฐเดฎเต เด เดคเดฟเดจเตเดฑเต เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเดเตพ เดธเตเดดเตเดธเต เดเตเดกเดฟเตฝ เดธเดเดฐเดเตเดทเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเดดเดฟเดตเดฟเดจเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเต. เดตเตเดฌเตโเดนเตเดเตเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ, เด เดต เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดเตเดเดณเตเดเตเดคเดพเดฏ เดธเตโเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดดเตเดคเตเดฃเตเดเดคเตเดฃเตเดเต. เด เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเตเดเตเดเดฟเตปเดธเต เดเดจเตเดฑเตผเดซเตเดธเดฟเตฝ เดธเตเดฅเดพเดชเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต, เด เดคเต เดชเดฐเดฟเดชเดพเดฒเดฟเดเตเดเดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต.
- เดเดคเต เดจเดฟเดเตเดเดณเตเดเต เดธเดฎเตเดชเดจเดฎเดพเดฏเดฟเดฐเดฟเดเตเดเดฟเดฒเตเดฒ. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเตป
-
เดเดดเตเดคเดพเตป
เดเตเดฐเตเตบเดเตเดฌเต เดเดฐเต เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเตผ เดเตเตผเดเตเดเตเด.- เดเดดเตเดคเตเดคเดฟเดจเตเด เดชเดฟเดจเตเดคเตเดฃเดเตเดเตเดฎเดพเดฏเดฟ เดธเดฎเดฏเด เดเตเดฒเดตเดดเดฟเดเตเดเตเดจเตเดจเต.
- เดเดชเตเดชเดฑเตเดฑเตเดฑเตผ เดเดคเดฟเดจเดเด เดธเดฎเดพเดจเดฎเดพเดฏ เดถเตเดฒเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดฐเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเตเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดจเดฟเดเตเดเดณเตเดเต เดถเตเดฐเดฆเตเดงเดฏเตเดเตเดเต เดจเดจเตเดฆเดฟ.
เด เดตเดฒเดเดฌเด: www.habr.com