แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„ Gitlab แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž“แŸ…แž€แž“แŸ’แž›แŸ‚แž„แž‡แžถแž…แŸ’แžšแžพแž“แŸ–

  1. แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž€แŸ’แžšแžปแž˜
  2. แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž‚แž˜แŸ’แžšแŸ„แž„
  3. แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml

แž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแž“แŸแŸ‡ แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž€แŸ’แžšแžปแž˜ แž“แžทแž„แž‚แž˜แŸ’แžšแŸ„แž„แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž‡แžถ "แžฏแž€แžŸแžถแžš" แžฌ "แžขแžแŸแžšแž‘แŸ€แž„แž‘แžถแžแŸ‹" แž แžพแž™แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แž”แŸ’แžšแžขแž”แŸ‹แž’แžธแž€ "แž€แžถแžšแž–แžถแžš" แž“แžทแž„ "แžšแž”แžถแŸ†แž„" แŸ”

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

แž…แžผแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž‡แžถแž˜แžฝแž™แž“แžนแž„แž˜แžšแžแž€แžŠแŸแžŸแžถแž˜แž‰แŸ’แž‰ แž แžพแž™แžœแžถแž“แžนแž„แž€แžถแž“แŸ‹แžแŸ‚แžŸแŸ’แž˜แžปแž‚แžŸแŸ’แž˜แžถแž‰แž”แž“แŸ’แžแžทแž…แž˜แŸ’แžแž„แŸ—แŸ”

แž”แž‰แŸ’แž‡แžธแž…แžปแž„แž€แŸ’แžšแŸ„แž™แž“แŸƒแž€แž˜แŸ’แžšแžทแžแžขแžถแž‘แžทแž—แžถแž–แžขแžถแž…แžšแž€แž”แžถแž“แž“แŸ…แž…แžปแž„แž”แž‰แŸ’แž…แž”แŸ‹แž“แŸƒแžฏแž€แžŸแžถแžšแŸ”

แž˜แžšแžแž€แž‡แžถแž˜แžฝแž™แž€แŸ’แžšแžปแž˜ [แž”แŸ’แžšแž—แž–]

แžขแžแŸแžšโ€‹แž–แžธโ€‹แž€แŸ’แžšแžปแž˜โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แž‘แž‘แžฝแž›โ€‹แž‡แžถโ€‹แž˜แžšแžแž€ แžŠแŸ„แž™โ€‹แž˜แžถแž“โ€‹แž…แŸ’แž”แžถแž”แŸ‹โ€‹แžแžถโ€‹แž€แŸ’แžšแžปแž˜โ€‹แž€แžถแž“แŸ‹โ€‹แžแŸ‚โ€‹แž‡แžทแžโ€‹แž‘แžธแžแžถแŸ†แž„โ€‹แž‘แŸ…โ€‹แž‚แž˜แŸ’แžšแŸ„แž„ แž“แŸ„แŸ‡โ€‹แžแž˜แŸ’แž›แŸƒโ€‹แžšแž”แžŸแŸ‹โ€‹แžœแžถโ€‹แž€แžถแž“แŸ‹โ€‹แžแŸ‚โ€‹แžŸแŸ†แžแžถแž“แŸ‹แŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

$ echo $MSG
B

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแžแŸแžšแž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„แž€แŸ’แžšแžปแž˜ B แž“แŸ„แŸ‡แž™แžพแž„แž“แžนแž„แžƒแžพแž‰แžแž˜แŸ’แž›แŸƒ A แŸ”

แž€แžถแžšแž‘แž‘แžฝแž›แžขแžแŸแžšแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml [แž”แŸ’แžšแž—แž–]

แžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แž‚แžบแžŸแžถแž˜แž‰แŸ’แž‰แžŽแžถแžŸแŸ‹แž“แŸ…แž‘แžธแž“แŸแŸ‡แŸ– แžขแŸ’แž“แž€แžขแžถแž…แž€แŸ†แžŽแžแŸ‹แžขแžแŸแžšแž‡แžถแžŸแž€แž› แžฌแžขแŸ’แž“แž€แžขแžถแž…แžŸแžšแžŸแŸแžšแž‡แžถแž“แŸ‹แž›แžพแžœแžถแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แž€แžถแžšแž„แžถแžšแŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

แžฅแžกแžผแžœโ€‹แž“แŸแŸ‡โ€‹แž™แžพแž„โ€‹แž”แž„แŸ’แž€แžพแžโ€‹แž€แžถแžšแž„แžถแžšโ€‹แž…แŸ†แž“แžฝแž“ 2 แžŠแŸ„แž™โ€‹แž€แŸ’แž“แžปแž„โ€‹แž…แŸ†แžŽแŸ„แž˜โ€‹แž“แŸ„แŸ‡ แž™แžพแž„โ€‹แž“แžนแž„โ€‹แž”แž„แŸ’แž แžถแž‰โ€‹แžฑแŸ’แž™โ€‹แž…แŸ’แž”แžถแžŸแŸ‹โ€‹แž“แžผแžœ $MSG แŸ”

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

แž˜แžšแžแž€แž‡แžถแž˜แžฝแž™แž€แŸ’แžšแžปแž˜ แž“แžทแž„แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml [แž”แŸ’แžšแž—แž–]

แž…แžผแžšแž™แžพแž„แž–แŸ’แž™แžถแž™แžถแž˜แž”แž‰แŸ’แž…แžผแž›แž‚แŸ’แž“แžถแž“แžผแžœแžงแž‘แžถแž แžšแžŽแŸ 2 แž˜แžปแž“แŸ” แžขแžแŸแžšแž€แŸ’แžšแžปแž˜แž˜แžถแž“แžขแžถแž‘แžทแž—แžถแž–แž›แžพแžขแžแŸแžšแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml แŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    Y
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    Y
    Job succeeded

แž€แžถแžšแž‘แž‘แžฝแž›แž˜แžšแžแž€แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž”แž‰แŸ’แž‡แžถแž€แŸ‹แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž‚แž˜แŸ’แžšแŸ„แž„ [แž”แŸ’แžšแž—แž–]

แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž‚แž˜แŸ’แžšแŸ„แž„แžแŸ‚แž„แžแŸ‚แž˜แžถแž“แžขแžถแž‘แžทแž—แžถแž–แžแŸ’แž–แžŸแŸ‹แž”แŸ†แž•แžปแž! แž แžพแž™แžขแžแŸแžšแžŠแŸ‚แž›แž”แžถแž“แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml แž˜แžทแž“แžŠแžพแžšแžแžฝแž“แžถแž‘แžธแžŽแžถแž˜แžฝแž™แž‘แŸแŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžขแžแŸแžšแž€แŸ’แžšแžปแž˜แž˜แžถแž“แžขแžถแž‘แžทแž—แžถแž–แž‘แžถแž”แž‡แžถแž„แŸ”
แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

แžแŸ„แŸ‡แž”แŸ’แžšแžพแžฏแž€แžŸแžถแžšแž–แžธแžงแž‘แžถแž แžšแžŽแŸแž˜แžปแž“แŸ” แž“แŸ…แž‘แžธแž“แŸแŸ‡แž˜แŸ’แžแž„แž‘แŸ€แžแž˜แžถแž“แžขแžแŸแžšแžŠแŸ‚แž›แž”แžถแž“แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แŸ’แžšแžปแž˜แž“แŸ…แžแŸ‚แž“แžถแŸ†แž˜แžปแžแž–แžฝแž€แžœแžถแŸ”

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    project-3
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    project-3
    Job succeeded

แž˜แžšแžแž€แžŠแŸ„แž™แžแž˜แŸ’แž›แŸƒแž‘แž‘แŸ [แž”แŸ’แžšแž—แž–]

แžแž˜แŸ’แž›แŸƒแž‘แž‘แŸแž€แŸแž‡แžถแžแž˜แŸ’แž›แŸƒแž•แž„แžŠแŸ‚แžšแŸ”
แžแž˜แŸ’แž›แŸƒแž‘แž‘แŸแž˜แžทแž“แž˜แŸ‚แž“แž‡แžถ Null แž‘แŸแŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Custom in global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    Job succeeded

แž˜แžšแžแž€แž‡แžถแž˜แžฝแž™แž€แžถแžšแžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž› แž“แžทแž„แž€แŸ’แžšแžปแž˜ [แž”แŸ’แžšแž—แž–]

แž“แŸ…แž‘แžธแž“แŸแŸ‡แž™แžพแž„แž“แžนแž„แž–แŸ’แž™แžถแž™แžถแž˜แž”แž‰แŸ’แž…แžผแž›แž‚แž˜แŸ’แžšแŸ„แž„ 2 แž€แŸ’แž“แžปแž„แž‚แž˜แŸ’แžšแŸ„แž„ 3
แž€แŸ’แžšแžปแž˜แž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแž“แŸแŸ‡แž˜แžถแž“แžขแžถแž‘แžทแž—แžถแž–แŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

แž แžพแž™แž€แŸ†แžŽแžแŸ‹แžขแžแŸแžšแž‡แžถแžŸแž€แž›แž€แŸ’แž“แžปแž„ .gitlab-ci.yml

variables:
 MSG: "With  include  .gitlab-ci.yml"
include:
 - project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
   file: '.gitlab-ci.yml'

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    B
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    B
    Job succeeded

แž˜แžšแžแž€แž‡แžถแž˜แžฝแž™แžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž› [แž”แŸ’แžšแž—แž–]

แž“แŸ…แž‘แžธแž“แŸแŸ‡แž™แžพแž„แž“แžนแž„แž–แŸ’แž™แžถแž™แžถแž˜แž”แž‰แŸ’แž…แžผแž›แž‚แž˜แŸ’แžšแŸ„แž„-2 แž€แŸ’แž“แžปแž„แž‚แž˜แŸ’แžšแŸ„แž„-3แŸ”
แž‡แžถแž˜แžฝแž™แž“แžนแž„แž›แž€แŸ’แžแžแžŽแŸ’แžŒแžแžถ: แž‘แžถแŸ†แž„แž€แŸ’แžšแžปแž˜ แžฌแž‚แž˜แŸ’แžšแŸ„แž„แžแŸ’แž›แžฝแž“แžœแžถแž˜แžทแž“แž˜แžถแž“แžขแžแŸแžšแžŽแžถแž˜แžฝแž™แžกแžพแž™แŸ”

แž€แŸ’แžšแžปแž˜แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸแžš

แžแžพ Gitlab-CI แž‘แž‘แžฝแž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž™แŸ‰แžถแž„แžŠแžผแž…แž˜แŸ’แžแŸแž…?

.gitlab-ci.yml

แžŠแžผแž…แž‚แŸ’แž“แžถแž“แžนแž„แžงแž‘แžถแž แžšแžŽแŸแž˜แžปแž“แžŠแŸ‚แžšแŸ”

variables:
 MSG: "With  include  .gitlab-ci.yml"
include:
 - project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
   file: '.gitlab-ci.yml'

แž›แž‘แŸ’แž’แž•แž›แž”แŸ†แž–แž„แŸ‹

  • แžขแŸแž€แžผ:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • แž”แž“แŸ’แž‘แžšแž‡แžถแž˜แžฝแž™ vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

แž›แž‘แŸ’แž’แž•แž›แž˜แžถแž“แžŠแžผแž…แžแžถแž„แž€แŸ’แžšแŸ„แž˜ แžขแžถแž‘แžทแž—แžถแž–:

  1. แžขแžแŸแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž‚แž˜แŸ’แžšแŸ„แž„
  2. แžขแžแŸแžšแž€แŸ’แž“แžปแž„แž€แŸ’แžšแžปแž˜
  3. แžขแžแŸแžšแžŠแŸ‚แž›แž”แžถแž“แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž™แŸ‰แžถแž„แžแžนแž„แžšแŸ‰แžนแž„แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แž€แžถแžšแž„แžถแžš (แžšแžฝแž˜แž‘แžถแŸ†แž„แžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แž”แžถแž“แžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›)
  4. แžขแžแŸแžšแžŸแž€แž›แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml
  5. แžขแžแŸแžšแžŸแž€แž›แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แžฏแž€แžŸแžถแžšแžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž›

แžŸแŸแž…แž€แŸ’แžแžธแžŸแž“แŸ’แž“แžทแžŠแŸ’แž‹แžถแž“

แž…แŸ†แžŽแžปแž…แžŠแŸ‚แž›แž˜แžทแž“แž…แŸ’แž”แžถแžŸแŸ‹แž”แŸ†แž•แžปแžแž“แŸ„แŸ‡แž‚แžบแžแžถ แž…แŸ’แž”แžถแž”แŸ‹ "แžขแžแŸแžšแž€แžถแž“แŸ‹แžแŸ‚แžแžทแžแž‘แŸ…แž‡แžทแžแž€แžผแžŠ แžœแžถแž€แžถแž“แŸ‹แžแŸ‚แžŸแŸ†แžแžถแž“แŸ‹" แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ†แž”แžผแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แŸ’แžšแžปแž˜ แž แžพแž™แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž…แŸ’แž”แžถแž”แŸ‹แžŠแžผแž…แž‚แŸ’แž“แžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแžแŸแžšแž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„ .gitlab-ci.yml แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžŸแŸ’แžแžทแžแž“แŸ…แž€แŸ’แžšแŸ„แž˜แž›แž€แŸ’แžแžแžŽแŸ’แžŒ แžแžถ แžขแžแŸแžš แž€แŸ’แž“แžปแž„ แž€แŸ’แžšแžปแž˜ แž˜แžทแž“ แžแŸ’แžšแžผแžœ แž”แžถแž“ แž”แž‰แŸ’แž‡แžถแž€แŸ‹ แŸ”
แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แž…แŸ†แžŽแžปแž…แžŸแŸ†แžแžถแž“แŸ‹แž˜แžฝแž™แž‚แžบแžแŸ’แžšแžผแžœแž™แž›แŸ‹แžแžถ แž…แž“แŸ’แž›แŸ„แŸ‡แžŸแž€แž›แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž˜แŸ แž“แžทแž„แžšแžฝแž˜แž”แž‰แŸ’แž…แžผแž› .gitlab-ci.yml แž‚แžบแž‡แžถแžšแžฟแž„แž’แž˜แŸ’แž˜แžแžถแŸ” แž แžพแž™แžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แž€แžถแžšแžŠแžถแž€แŸ‹แž”แž‰แŸ’แž…แžผแž›แž€แžพแžแžกแžพแž„แž˜แžถแž“แžขแžถแž‘แžทแž—แžถแž–แŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹