เบซเบเบถเปเบเปเบเบซเบเปเบฒเบเบตเปเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบเบตเปเบชเบธเบ, เบเบตเปเบเปเปเบกเบตเบขเบนเปเปเบเบชเบฐเบเบฑเบเบเบฃเบตเบเบญเบ GitLab, เปเบกเปเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบฅเบปเบเบเบฐเปเบเบเบชเบฝเบเบเปเปเบเบฑเบเบเบฒเบ nullification repository เปเบฅเบฐเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบฅเบงเบกเปเบเบปเปเบฒเบเบฑเบ (MR), เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเบปเบเบเบงเบเบฅเบฐเบซเบฑเบเบเบฑเบเบเบฑเบ.
เปเบซเปเปเบฎเบปเบฒเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเบเปเบฒเปเบชเบธเบเบเบตเปเบเบปเบงเปเบฎเบปเบฒเปเบญเบ - เบเบงเบเปเบฎเบปเบฒเบเบฐเบซเปเบฒเบก Merge เบเบปเบเบเปเบงเบฒเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบซเบผเบฒเบเบเบปเบเบเบปเบเปเบเป MR.
เปเบเบฑเบเบซเบเบฑเบเบญเบฑเบเบเบตเปเบเบถเปเบเบเปเบฒเปเบเบฑเบ?
เบญเบปเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบทเปเปเบเบญเบฐเบเบธเบเบฒเบ GitLab เปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบ. เปเบเป, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบกเปเบเบเปเบฒเปเบเบตเบเบขเบนเปเปเบเบงเบปเบเบเบดเบเปเบเบเบเปเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบญเบดเบเปเบเบตเปเบเบฑเบ, เปเบฅเบฐเบกเบตเบเบฒเบเบงเบฒเบเปเบเบเบเบปเบเบเบฐเบกเบฒเบเบขเปเบฒเบเปเบเบฑเปเบกเบเบงเบ, เบเบฒเบเบเบทเปเปเบเบญเบฐเบเบธเบเบฒเบเบเบธเปเบกเบเบญเบเบเบปเบเปเบญเบเบเบตเปเบกเบตเบซเบเปเบฒเบเบตเปเบเบตเปเบเปเบฒเปเบเบฑเบเบชเบฒเบกเบฒเบเบฅเบฒเบเปเบเปเบเบฑเบเปเบงเบฅเบฒเบซเบผเบฒเบเปเบเบทเบญเบ, เปเบเปเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบญเบเปเบเปเปเบฎเบฑเบเปเบเบเบฑเบเบเบธเบเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบเบฐเบเปเบญเบ:
- เบซเบผเบทเบซเปเบฒเบกเบขเปเบฒเบเบชเบปเบกเบเบนเบ Merge เปเบเบชเบฒเบเบฒเบเบตเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบปเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบเบปเบ, เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบนเปเบเบฑเบเบเบฐเบเบฒเบเบตเปเบกเบตเบชเบดเบเบเบตเปเบเบฐ Merge เปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเปเบเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบฅเบงเบก MRs เบเบญเบเบเบนเปเบญเบทเปเบเปเบเบฑเบเปเบเบเบฑเบ;
- เบซเบผเบทเปเบซเปเปเบญเบเบฒเบเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบตเปเบเปเปเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเปเบเปเบเบฑเบเบชเบฒเบเบฒเบเบปเปเบเบชเบฐเบเบฑเบเบเบญเบเบเปเบฒเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบปเบเบเบงเบเบฅเบฐเบซเบฑเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบกเบฑเบเปเบเบฑเบ Junior, เบเบนเปเบเบตเปเบเบทเบเบเปเบฒเบเปเบเบกเบทเปเบงเบฒเบเบเบตเป.
เบชเบดเปเบเบเปเบฒเบญเบดเบเบเบตเปเบเปเบญเบเปเบฎเบฑเบเปเบกเปเบ Google, เปเบเบทเปเบญเบงเปเบฒเบเบฒเบเบเบปเบเปเบเปเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบฅเปเบง (เปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเปเบเบเบฅเบฐเบซเบฑเบ), เปเบเปเบกเบฑเบเบเบฒเบเบปเบเบงเปเบฒเบเปเปเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเปเบฒเบงเปเบเบชเบฐเบเบฑเบเบเบธเบกเบเบปเบเปเบเบทเปเบญ.
เปเบเบโเบเบฒเบโเบเบปเปเบงโเปเบโเบเบญเบโเบเบฒเบโเปเบฎเบฑเบโเบงเบฝเบโ
เบเบปเบงเบขเปเบฒเบ, เปเบซเปเปเบฎเบปเบฒเบเบฑเปเบเบเปเบฒเบเบฒเบเบญเบฐเบเบธเบกเบฑเบเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเบฎเบงเบกเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเบปเบเบชเบญเบ
- เปเบซเปเบชเปเบฒเบ token เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ GitLab API (เบเปเบฒเบเบกเบฑเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเปเบฒเบเบงเบเบเบญเบเบเบฒเบเบฅเบปเบเบเบฐเปเบเบเบชเบฝเบ "เบชเปเบฒเบฅเบฑเบ" เปเบฅเบฐ "เบเปเป")
- เปเบซเปเปเบเบตเปเบก token เปเบซเปเบเบฑเบเบเบปเบงเปเบ GitLab
- เปเบซเปเบเบดเบเบเบฒเบเบฅเบงเบกเปเบเบปเปเบฒเบเบฑเบเปเบเบเปเบฅเบฐเบเบตเปเบเบตเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบเปเป (เบเปเบฒเบเปเปเบกเบตเบเบฐเปเบเบ upvotes เบเบฝเบเบเป)
- เบกเบฒเบเบฑเปเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฐเปเบเบเบชเบฝเบเปเบเบฑเบเบชเปเบงเบเปเบถเปเบเบเบญเบเบเปเป CI/CD
- เบเบงเบเปเบฎเบปเบฒเบซเปเบฒเบกเบเบฒเบเปเบฎเบฑเบเบชเบฑเบเบเบฒเบเบฑเบเบชเบฒเบเบฒเบเบตเปเบเบทเบเบเบปเบเบเปเบญเบ; เบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบฎเบฑเบเบเปเบฒเบ MR เปเบเบปเปเบฒเบเบฑเปเบ
- เปเบซเปเบเบงเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบเบตเปเบชเบธเบ
1. เบชเปเบฒเบ token เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบดเบ API
เปเบเบเบตเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบนเปเปเบเป โ Access Token เปเบฅเบฐเบเบฝเบเปเบเปเบเบฑเบเบฅเบปเบ:
เบเบฑเบเบเบตเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเปเบเปเบเบฑเบ
เบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ API เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบฎเบฑเบเปเบเบทเบญเบเบเบธเบเบขเปเบฒเบเบเบฑเบ repositories เบเบญเบเบเปเบฒเบ, เบชเบฐเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบฐเบเปเบฒเปเบซเปเบชเปเบฒเบเบเบฑเบเบเบต Gitlab เปเบเบเบเปเบฒเบเบซเบฒเบ, เปเบซเปเบกเบฑเบเบชเบดเบเบเบดเบซเบเปเบญเบเบเบตเปเบชเบธเบเบเบฑเบ repositories เบเบญเบเบเปเบฒเบ (เปเบเบฑเปเบ: Reporter) เปเบฅเบฐเปเบเปเบฎเบฑเบ token เบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบตเบเบฑเปเบ.
2. เปเบเบตเปเบก token เบเบฑเบเบเบปเบงเปเบ Gitlab
เบเบปเบงเบขเปเบฒเบ, เปเบเบเบฑเปเบเบเบญเบเบเบตเปเบเปเบฒเบเบกเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ token QmN2Y0NOUFlfeXhvd21ZS01aQzgK
เปเบเบตเบเบเบฒเบเบเบฑเปเบเบเปเบฒ โ CI/CD โ เบเบปเบงเปเบ โ เปเบเบตเปเบกเบเบปเบงเปเบ โ GITLAB_TOKEN_FOR_CI
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ:
เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเบฑเบเปเบเบซเบเบถเปเบ repository เบซเบผเบทเปเบเบเบธเปเบกเบเบญเบ repositories.
3. เบเบงเบเปเบฎเบปเบฒเบงเบฒเบเบเปเปเบซเปเบฒเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบ Merge เบเปเบฒเบเบฒเบเบญเบฐเบเบธเบกเบฑเบเบเบญเบเปเบเบทเปเบญเบเบฎเปเบงเบกเบเบฒเบเบเปเปเปเบเปเบฎเบฑเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบปเบเบเบงเบเบเบทเบเบฅเบฐเบซเบฑเบ.
เปเบโเบเปโเบฅเบฐโเบเบตโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโ, เบเปเปโเบซเปเบฒเบกโเบเปเบฝเบงโเบเบฑเบโเบเบฒเบ Merge เปเบกเปเบโเบงเปเบฒโเบเปเปโเบเบฒเบโเบเบฐโเบเบญเบโเบเบฐโเบเบฑเบโเบเบทเบโเบกเบฒโเบเบงเบฒเบกโเบเบดเบโเบเบฒเบโเบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเปเปโเบกเบตโเบเบฐโเปเบเบโเบชเบฝเบโเบเบฝเบโเบเปโ.
เปเบโเบเบตเป Settings โ General โ Merge Requests โ Merge Checks เปเบฅเบฐโเปเบเบตเบโเปเบเปโเบเบฒเบโเบเบฒเบโเปเบฅเบทเบญเบโเบเบญเบโเบชเบฒเบ Assembly เบเปเบญเบโเบชเปเบฒโเปเบฅเบฑเบโเบขเปเบฒเบโเบชเปเบฒโเปเบฅเบฑเบโเบเบปเบโ.
4. เบเบฒเบเบเบฑเปเบเบเปเป
เบเปเบฒเบเปเบฒเบเบเบฑเบเบเปเปเปเบเปเบชเปเบฒเบเบเปเป CI/CD เบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเปเบฒเบ
เบชเปเบฒเบเปเบเบฅเปเบขเบนเปเปเบเบฎเบฒเบเบเบญเบ repository .gitlab-ci.yml เบกเบตโเปเบเบทเปเบญโเบซเบฒโเบเปเบฒเบโเบเบฒเบโเบเบตเปโเบชเบธเบโ:
stages:
- build
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
run-myapp:
stage: build
script: echo "Hello world"
เบเบฑเบเปเบเบฑเบเบเปเปเบกเบนเบเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒ CI/CD
เบเปเบญเบเบเปเปเบเบฐเบเปเบฒเปเบซเปเบชเปเบฒเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเปเบฒเบเปเบเบฅเป myapp.gitlab-ci.yml เปเบเบทเปเบญเบเบฑเปเบเบเปเบฒเบเปเป. เบงเบดเบเบตเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบญเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบเปเบเบตเบเบงเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบเปเบฝเบเบเปเปเบเปเปเบชเปเบฒเบเปเบฅเบฐเปเบเปเบฎเบฑเบ token เบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ.
เบชเบฐเบเบฒเบเบเบตเปเบเบญเบเปเบเบฅเปเบเปเปเปเบซเบกเปเบเบฐเบเปเบญเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบเบเบฒเบเปเบเบเบตเป myapp repository - เบเบฒเบเบเบฑเปเบเบเปเบฒ - CI/CD - เปเบชเบฑเปเบเบชเบฐเบเบฒเปเบซเปเบ - เปเบชเบฑเปเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒ CI Custom - เบฅเบฐเบเบธเปเบเบฅเปเปเบซเบกเป, e.g. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci
เปเบเบฑเบเบฅเบฑเบ: เปเบเป linter เปเบเบทเปเบญเบเปเบฝเบเปเบเบเปเบเบฅเป GitLab CI
เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบปเบเบเบฝเบง, เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบฒเบ MR เบเบฐเปเบเบฑเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเบตเปเบเบต, เบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบเปเบฒเบเบเบฑเบเปเบเบฅเปเบเปเปเบเปเบฒเบ linter. เบเปเบฒเบเปเบฒเบเปเบฎเบฑเบเบเบดเบเบเบฒเบเปเบ syntax เบเบญเบเปเบเบฅเป YAML, เบกเบฑเบเบเบฐเบเปเปเบเปเบฒเบฅเบฒเบเบเปเปเบเบฒเบเบเบฐเบฅเบดเบเบเบญเบเบเปเบฒเบ, เปเบเปเบเบฝเบเปเบเปเบเบฐเบเบฑเบเบเบงเบฒเบเบเบฒเบเบฅเบงเบกเปเบเบปเปเบฒเบเบฑเบ.
เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฑเบเบเบตเปเบกเบต linters เบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบเบปเปเบฒเปเบเปเบเบเปเปเบเบญเบเบเปเบฒเบ:
เปเบฅเบฐเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฑเปเบเบเบญเบเบเบฒเบเบเบงเบเบชเบญเบ:
stages:
- lint
lint:
stage: lint
image: sebiwi/gitlab-ci-validate:1.3.0
variables:
GITLAB_HOST: https://gitlab.com
script:
- CI_FILES=(./*.yml)
- for f in "${CI_FILES[@]}"; do
gitlab-ci-validate $f;
done;
เบกเบฑเบเบเบฑเบเบเบปเบเบเบฐเปเบเบตเปเบกเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบฒเบเบขเปเบฒเบเปเบชเปเบเปเปเบเบญเบเบเปเบฒเบเปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบ:
stages:
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
เบเบปเบงเปเบ NEED_VOTES เบเบณเบเบปเบเบเบณเบเบงเบ โเบเบปเบเปเบเปเบกเบทโ MR เบเปเบญเบเบกเบตเปเบเบทเปเบญเปเบซเป Merge เบชเบฒเบกเบฒเบเปเบเปเปเบเป. เบกเบนเบเบเปเบฒเปเบเบปเปเบฒเบเบฑเบเบซเบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบปเบงเบเปเบฒเบเปเบญเบเบชเบฒเบกเบฒเบเบญเบฐเบเบธเบกเบฑเบ MR เบเบญเบเบเปเบฒเบเปเบเบเบเบฒเบ "เบกเบฑเบ" เบกเบฑเบ.
เบเบฐเบเบญเบเบกเบตเบเบฑเปเบเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบ, เปเบเบดเปเบเบเบงเบเบชเบญเบเบเปเบฒเบเบงเบเบเบญเบ "เบกเบฑเบ".
เบเปเปเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเปเบเบเปเบเปเบเบปเบงเบขเปเบฒเบเบเบญเบ myapp.gitlab-ci.yml
stages:
- build
- test
variables:
NEED_VOTES: 0
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
run-myapp:
stage: build
image: openjdk
script:
- echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java
เปเบเบทเปเบญเปเบ check-approve.gitlab-ci.yml
ci-mr:
stage: test
script:
- echo ${CI_API_V4_URL}
- echo "CI_PROJECT_ID ${CI_PROJECT_ID}"
- echo "CI_COMMIT_SHA ${CI_COMMIT_SHA}"
- "export MR_ID=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .id else {} end" | grep --invert-match {})"
- "export MR_TITLE=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .title else {} end" | grep --invert-match {})"
- "export MR_WIP=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .work_in_progress else {} end" | grep --invert-match {})"
- "export MR_UPVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .upvotes else {} end" | grep --invert-match {})"
- "export MR_DOWNVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .downvotes else {} end" | grep --invert-match {})"
- MR_VOTES=$(expr ${MR_UPVOTES} - ${MR_DOWNVOTES})
- NEED_VOTES_REAL=${NEED_VOTES:-1}
- echo "MR_ID ${MR_ID} MR_TITLE ${MR_TITLE} MR_WIP ${MR_WIP} MR_UPVOTES ${MR_UPVOTES} MR_DOWNVOTES ${MR_DOWNVOTES}"
- echo "MR_VOTES ${MR_VOTES} Up vote = 1, down vote = -1, MR OK if votes >=${NEED_VOTES_REAL}"
- if [ "${MR_VOTES}" -ge "$(expr ${NEED_VOTES_REAL})" ];
then
echo "MR OK";
else
echo "MR ERROR Need more votes";
exit 1;
fi
image: laptevss/gitlab-api-util
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release/.*$/'
เบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบงเบเบชเบญเบ:
- เบกเบตเบเปเปเบเปเบฒเบเบฑเบเบเบตเปเบเบฒเบเบเบงเบเบชเบญเบเบเบฐเปเบฎเบฑเบเปเบเปเบเบฝเบเปเบเปเปเบกเบทเปเบญเบชเปเบฒเบ MR เปเบเปเบกเปเบเบปเบเบซเบผเบทเบชเบฒเบเบฒ / * เบเปเบญเบ
- เบเบฒเบเบเปเบฒเปเบเป GitLab API, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเปเบฒเบเบงเบเบเบญเบ "เบกเบฑเบ" เปเบฅเบฐ "เบเปเปเบกเบฑเบ"
- เบเบดเบเปเบฅเปเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบฅเบฐเบซเบงเปเบฒเบเบเปเบฒเบเบญเบเปเบเบเบฒเบเบเบงเบเปเบฅเบฐเบเบฒเบเบฅเบปเบ
- เบเปเบฒเบเบงเบฒเบกเปเบเบเบเปเบฒเบเปเบกเปเบเบซเบเปเบญเบเบเบงเปเบฒเบกเบนเบเบเปเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเปเบงเปเปเบ NEED_VOTES, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบชเบฐเบเบฑเบเบเบฑเปเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบฅเบงเบก
5. เบซเปเบฒเบกเบเบถเบเปเบฑเปเบเบเบฑเบเบชเบฒเบเบฒเบเบตเปเบเบปเบเบเปเบญเบ
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบชเบฒเบเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบปเบเบเบงเบเบฅเบฐเบซเบฑเบเปเบฅเบฐเบเบตเปเบเบญเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเปเบฒเบ MR เปเบเบปเปเบฒเบเบฑเปเบ.
เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เปเบเบเบตเป Settings โ Repository โ Protected Branches:
6. เบเบงเบเบเบฒ
เบเบณเบเบปเบ NEED_VOTES: 0
เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบ MR เปเบฅเบฐเปเบชเป "เบเปเปเบกเบฑเบ".
เปเบโเบเบฑเบโเบเบถเบโเบเบฒเบโเบเปเปโเบชเปเบฒเบโ:
เบเบญเบเบเบตเปเปเบชเป "เบกเบฑเบ" เปเบฅเบฐเปเบฅเบตเปเบกเบเบงเบเปเบเบดเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ:
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com