CI/CD
ΠΠΎΡΠ΅ΠΌΡ GitLab CI/CD?
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ GitLab CI / CD ΠΏΠΎ ΡΡΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ: Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ CI / CD Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΡΡΡΠΎ ΠΈ ΠΎΠ½ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ GitLab CI / CD Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π°ΡΠ²ΠΊΠΈ, ΠΌΡΡΠ΄ΠΆ ΡΠ΅ΠΊΠ²Π΅ΡΡΡ, ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ CI / CD Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½.
GitLab CI / CDΒ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ±ΠΎΡΡ GitLab Runners.
Π Π°Π½Π½Π΅ΡΡ – ΡΡΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ ΡΠ΅ΡΠ΅Π· API GitLab CI.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ GitLab ΡΠ°Π½Π½Π΅ΡΠ°Ρ ΠΏΠΎ ΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠΎ ΠΎΡΠΊΡΡΡΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³Ρ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² Π±Π°Π·Ρ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΊΠ΅Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Node.js, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ½ΠΈΠ³ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠ°Π»ΠΊΠΈΠ²Π°Π΅Ρ Π½Π°Ρ ΠΊΠΎΠ΄ Π½Π° ΡΡΠΈ ΡΡΠ°ΠΏΠ°: ΡΠ±ΠΎΡΠΊΠ°, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅.
ΠΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ – ΡΡΠΎ Π³ΡΡΠΏΠΏΠ° ΡΠ°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΡΡ ΠΎΠ΄Π½ΡΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌ.
ΠΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π»ΠΈΠ½ΡΠ΅ΡΡ ΠΈ Π»ΡΠ±ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Deploy Pipeline ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΈ ΡΡΠ΅Π΄Ρ.
Π¨Π°Π³ΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°ΠΌΠΈ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡΠΌΠΈ.
ΠΠΎΠ³Π΄Π° Π²Ρ Π³ΡΡΠΏΠΏΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΏΠΎ ΡΡΠΈΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΠΏΠ°ΠΌΠΈ.
Π Π°Π±ΠΎΡΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π±Π»ΠΎΠΊΠΎΠΌ Π΄Π»Ρ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄ΠΎΠ².
ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΡΡΠ°ΠΏΠ°ΠΌ, Π° ΡΡΠ°ΠΏΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΡΡΠ°ΠΏΠΎΠ² ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ²:
Π.) Π‘Π±ΠΎΡΠΊΠ° Β Β Β Β Β Ρ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ NPM Β Β Β Β Β II. ΠΠ°ΠΏΡΡΠΊ ES-Linter Β Β Β Β Β III. ΠΠ°ΠΏΡΡΠΊCode-Minifier
B.) Π’Π΅ΡΡ
Β Β Β Β Β I. ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ½ΠΈΡ, ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ ΡΠ΅ΡΡ.
Β Β Β Β Β II. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ pkg Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Node.js
C.) Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅
Β Β Β Β Β I. ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ
Β Β Β Β Β Β Β Β 1.) ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ EC2 Π½Π° AWS
Β Β Β Β Β II. ΠΈΠ½ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ°
Β Β Β Β Β Β Β Β 1.) ΠΠ°ΠΏΡΡΡΠΈΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ GitLab CI / CD
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GitLab CI / CD, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ .gitlab-ci.yml Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ GitLab ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ yaml:
image: node:10.5.0
stages:
- build
- test
- deploy
before_script:
- npm install
ΠΠ°ΠΊ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» ΡΠ°Π½Π΅Π΅, GitLab CI / CD ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°Π½Π½Π΅ΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ².
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π° ΠΊΠ°ΠΊΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π½Π°Ρ ΡΠ°Π½Π½Π΅Ρ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π»ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ image.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Node.js.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° stages ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ°ΠΏ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ°Π΄Π°Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ stages.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° before_script ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ΅ΠΌΠΈ Π·Π°Π΄Π°Π½ΠΈΡΠΌΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ°ΠΏΡ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π½Π°Π·Π²Π°ΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ build-min-code.
Π ΡΡΠΎΠΉ Π΄ΠΆΠΎΠ±Π΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ script.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Π° script – ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ°Π½Π½Π΅ΡΠ°.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΡΠ°ΠΏ Β«buildΒ». Π§ΡΠΎΠ±Ρ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΡΠ°ΠΏ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ stage.
build-min-code:
stage: build
script:
- npm install
- npm run minifier
run-unit-test:
stage: test
script:
- npm run test
deploy-production, deploy-staging.deploy-staging:
stage: deploy
script:
- npm run deploy-stage
only:
- develop
deploy-production:
stage: deploy
script:
- npm run deploy-prod
only:
- master

image: node:10.5.0
stages:
- build
- test
- deploy
before_script:
- npm install
build-min-code:
stage: build
script:
- npm install
- npm run minifier
run-unit-test:
stage: test
script:
- npm run test
deploy-staging:
stage: deploy
script:
- npm run deploy-stage
only:
- develop
deploy-production:
stage: deploy
script:
- npm run deploy-prod
only:
- master
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΡΠ½ΠΊΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ GitLab CI / CD.
GitLab CI / CD ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π· ΠΊΠΎΠ΄ΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΡ ΠΎΠ±ΡΠ°Π·Ρ Docker Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ Π½Π°ΡΠ»ΠΈ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠ΅!
![]()
