GitLab CI: рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдХреА 6 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ



рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА CI / CD рдХреЗ рдпреБрдЧ рдореЗрдВ, рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ CI рд╕рд┐рд╕реНрдЯрдо рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ GitLab рдерд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдмрди рдЧрдпрд╛, рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ "рджреЗрд╢реА"ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреВрд░реЗ * рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдпреЛрдЧ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреАред рдЙрддреНрдкрд╛рдж рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдмрдврд╝рддреА рд░реБрдЪрд┐ рд╕реЗ рдкреАрдЫреЗ рдирд╣реАрдВ рд░рд╣реЗ, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рд╕рдиреНрди рдХрд░рддреЗ рд╣реБрдПред


GitLab рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдорд╣реАрдиреЗ рдФрд░ рдЯреИрдЧ рдПрдХрддреНрд░реАрдХрд░рдг

GitLab рд╡рд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХрдИ рдирдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдХрд░рдг рдЪреБрдирдиреЗ рдХреЗ рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрджрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЧрд┐рдЯрд▓реИрдм рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╛рдж рдХрд┐рдпрд╛ред рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрднрд░рддреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдкрдбреЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - i.e. рд╣рдорд╛рд░реЗ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдХреА рдЧрдИ - GitLab рдХреЗ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

* 5 , ┬лGitLab┬╗, : ┬л, GitHub?┬╗. тАФ , Google Trends 5- ┬лgitlab┬╗ . ┬л┬╗ , . , , ┬л┬╗ .

тДЦ1: needs


  • job'.
  • GitLab: 12.2.
  • .

рд╕реЛрдЪрд╛ dependencies- рдпрд╣ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рд╢рд╛рдпрдж, рд╣рдо рдХреЗрд╡рд▓ рд╡рд╣реА рдирд╣реАрдВ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЧрд▓рддреА рдХреА рдереА ... рдкрд┐рдЫрд▓реА рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИред

рдорд╛рдирд╛ рдХрд┐ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рдЪрд░рдг рдореЗрдВ рдРрд╕реА рдиреМрдХрд░рд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдЪрд░рдг рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ (рдЖрд▓рд╕реНрдп рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЗрдВрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рд╕реНрдерд┐рддрд┐:



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреЗрдЬ рдбрд┐рдкреНрд▓реЙрдп рдореЗрдВ рдкреНрд░реЛрдбрдХреНрд╢рди рдФрд░ рд╕реНрдЯреЗрдЬ, рдФрд░ рд╕реЗрд▓реЗрдирд┐рдпрдо рдЯреЗрд╕реНрдЯ рджреЛрдиреЛрдВ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╣реИрдВрдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд░рд▓ рд╣реИ: рд╡рд╣ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреА рд╕рднреА рдиреМрдХрд░рд┐рдпрд╛рдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реА рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдордВрдЪ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдкрд╣рд▓реЗ рдЯреИрдЧ рдХреЗ рднреАрддрд░ рдкрдВрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдХреНрдпрд╛ рдХрд░реЗрдВ? рдлрд┐рд░ рдмрдЪрд╛рд╡ рдХреА рдЬрд░реВрд░рдд рд╣реИ !

рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкрд┐рдЫрд▓реА рдиреМрдХрд░рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрддреЗ рд╣реИрдВ:

  needs:
    - To production (Cluster 1)
    - To production (Cluster 2)

... рдФрд░ рд╣рдореЗрдВ рдПрдХ рдиреМрдХрд░реА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рд╕реВрдЪреАрдмрджреНрдз рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдЖрд╕рд╛рдиреА рд╕реЗ, рд╕рд╣реА? рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ dependencies...

рдирдВрдмрд░ 2: рдлреИрд▓реА рд╣реБрдИ рд╣реИ


  • рдмрдврд╝рд╛рдпрд╛ YAML рдПрдВрдХрд░ рдФрд░ рдЙрдкрдирд╛рдоред
  • GitLab 11.3 рдХреЗ рдмрд╛рдж рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • docs.gitlab.com/ce/ci/yaml/#extends

рдкрдврд╝рдиреЗ рдХреЗ рд░реЛрд▓ рд╕реЗ рдердХ рдЧрдП .gitlab-ci.yaml? рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рдЧреБрдо рд╣реИ? рддрдм рдЖрдк рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рдд: рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдкрдХреЛ .gitlab-ci.yamlрдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд▓реЗ рдЖрдП :

.base_deploy: &base_deploy
  stage: deploy
  script:
    - my_deploy_command.sh
  variables:
    CLUSTER: "default-cluster"
    MY_VAR: "10"

Deploy Test:
  <<: *base_deploy
  environment:
    url: test.example.com
    name: test

Deploy Production:
  <<: *base_deploy
  environment:
    url: production.example.com
    name: production
  variables:
    CLUSTER: "prod-cluster"
    MY_VAR: "10"

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЖрдкрдХреА рдирдЬрд╝рд░ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ ... рд╣рдордиреЗ рди рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ variables.CLUSTER, рдмрд▓реНрдХрд┐ рджреВрд╕рд░реА рдмрд╛рд░ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ variables.MY_VAR=10? рдХреНрдпрд╛ рдЗрд╕ рдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП base_deploy? рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: YAML рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐, рдПрдВрдХрд░ рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдореЗрдВ рдЬреНрдЮрд╛рдд рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред

рд╣рд╛рдВ, "рд╡рд┐рд╕реНрддрд╛рд░" рд╕рд╣реА рд╢рдмреНрдж рд╣реИ: рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Extendsрд╡реЗ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдВрдХрд░ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдорд░реНрдЬ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

.base_deploy: 
  stage: deploy
  script:
    - my_deploy_command.sh
  variables:
    CLUSTER: "default-cluster"
    MY_VAR: "10"

Deploy Production:
  extends: .base_deploy
  environment:
    url: production.example.com
    name: production
  variables:
    CLUSTER: "prod-cluster"

рдпрд╣рд╛рдБ рдкрд░ рдЕрдВрддрд┐рдо рдЬреЙрдм рдбрд┐рдкреНрд▓реЙрдп рдкреНрд░реЛрдбрдХреНрд╢рдиMY_VAR рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рджреЛрдиреЛрдВ рд╣реЛрдВрдЧреЗ CLUSTERред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕реА рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ base_deployрдФрд░ 20 рд╕рд░реНрдХрд┐рдЯ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рд╣реИрдВред рдЪрд░ рдпрд╛ рдЕрдиреНрдп рдорд┐рд▓рд╛рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП cluster, рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЛрдВ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ environment.name... рдЗрд╕ рдЫреЛрдЯреА рд╕реА рдЦреБрд╢реА рдиреЗ рд╣рдореЗрдВ рдХрдИ рджреЗрд╡-рд╕рд░реНрдХрд┐рдЯреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ 2-3 рдЧреБрдирд╛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдирдВрдмрд░ 3: рд╢рд╛рдорд┐рд▓ рд╣реИрдВ


  • рд╣рдо рд╡рд┐рд╢рд╛рд▓ YAML рдХреЛ рдХрдИ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • 11.4 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЛрд░ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • docs.gitlab.com/ce/ci/yaml/#include

.gitlab-ci.yamlрдпрд╣ рдЕрднреА рднреА 20 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡реИрдХреНрдпреВрдо рдХреНрд▓реАрдирд░ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╣ рдирд┐рд░реНрджреЗрд╢ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдореВрд▓ рдПрдХ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ) рдХреНрдпрд╛ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рдЕрдЬреНрдЮрд╛рдд рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдПрдХ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд┐рддреНрд░ рдорджрдж рдХрд░реЗрдЧрд╛ include:

stages:
  - test
  - build
  - deploy

variables:
  VAR_FOR_ALL: 42

include:
  - local: .gitlab/ci/test.yml
  - local: .gitlab/ci/build.yml
  - local: .gitlab/ci/deploy-base.yml
  - local: .gitlab/ci/deploy-production.yml

рдЙрдиред рдЕрдм рд╣рдо рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреИрдирд╛рддреА рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкрд░реАрдХреНрд╖рдХ рдЕрдкрдиреА рдлрд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦ рднреА рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдордЬрд╛ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреА 20 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА? рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рд╡рд┐рднрд┐рдиреНрди рдХреЛрдб рд╡рд╛рд▓реА рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рджрд░реНрдЬрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ, рд▓реЗрдХрд┐рди рд╕рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реАрдЖрдИ рдХреЛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕реАрдЖрдИ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмрд┐рдирд╛ - рдЙрд╕реА рддрд░рд╣ рд╕реЗ рддреИрдирд╛рдд - рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдмрд┐рдирд╛! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ includeрдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред

рдирдВрдмрд░ 4: рдХреЗрд╡рд▓ / рд░реЗрдлрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░


  • рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣рд┐рдд рд╡реНрдпрд╛рдкрдХ рд╕реНрдерд┐рддрд┐рдпрд╛рдБред
  • рдЪреВрдВрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдЧрд┐рдЯрд▓реИрдм 10.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ, рдЬрдмрдХрд┐ рдЕрдиреНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП changes) 11.4 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ ред
  • docs.gitlab.com/ce/ci/yaml/#onlyexcept-advanced

рдХрднреА-рдХрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдмрд╛рдд рд╕реБрдирдиреЗ рд╡рд╛рд▓реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╣рдо рд╣реИрдВред рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ only/ except- рдЕрдм рдПрдХреАрдХреГрддред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рд╕рдмрд╕реЗ рд╕рд░рд▓ (рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реБрдЦрдж) рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдВрдШрди рдЪрд░рдгреЛрдВ:

Tests:
  only:
    - master
  except:
    refs:
    - schedules
    - triggers
    variables:
    - $CI_COMMIT_MESSAGE =~ /skip tests/

рдЙрджрд╛рд╣рд░рдг рдХреА рдиреМрдХрд░реА рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдпрд╛ рдЯреНрд░рд┐рдЧрд░ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (GitLab рдПрдкреАрдЖрдИ рдХреЙрд▓ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рд╣реИ)ред рдпрджрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕реНрдХрд┐рдк рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕рдлрд╝реНрд░реЗрдЬрд╝ рд╣реИ рддреЛ рдиреМрдХрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, README.mdрдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкреЛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

"рдЕрд░реЗ, 2020 рдмрд╛рд╣рд░ рд╣реИ!" рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рд▓реЛрд╣реЗ рдХреЗ рдмрдХреНрд╕реЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреНрдпреЛрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрджрд▓рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ? " рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ: only:changesрдпрд╣ рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  only:
    refs:
      - master
      - merge_requests
    changes:
      - "front/**/*"
      - "jest.config.js"
      - "package.json"

рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдПрдХреНрд╢рди рдХреЗ рд▓рд┐рдП - i.e. рднрд╛рдЧреЛ рдордд - рд╣рд╛рдБ except:changesред

рдирдВрдмрд░ 5: рдирд┐рдпрдо


  • рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреМрдХрд░реА рдХреЗ рдирд┐рдпрдоред
  • GitLab 12.3 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • docs.gitlab.com/ce/ci/yaml/#rules

рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ only:*, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде: рдпрд╣ рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ whenред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдмрд╕ рдмрдЯрди рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд┐рдирд╛ рдПрдХ рдирдИ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ рдХрд┐рдП рдпрд╛ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдПред

# 6: рдкрд░реНрдпрд╛рд╡рд░рдг: auto_stop_in


  • рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд░реЛрдХреЗрдВред
  • GitLab 12.8 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
  • docs.gitlab.com/ce/ci/yaml/#environmentauto_stop_in

рд╣рдордиреЗ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рдФрд░ рдЕрднреА рддрдХ рдЗрд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдПрдХ рд╣реА рдмрд╛рдд" рд╣реИ рдЬреЛ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдереАред

рдЖрдк GitLab рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ on_stop- рдпрд╣ рддрдм рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдПред K рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд╛рд░реНрдп on_stopрдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдордЖрд░ рдХрд╛ рд╡рд┐рд▓рдп рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рдПрдордЖрд░ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ), рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рддрд╛рд░реНрдХрд┐рдХ, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдпрджрд┐ рдорд╛рдирд╡ рдХрд╛рд░рдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ GitLab рдореЗрдВ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ MR рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддреЗ рд╣реИрдВ git mergeред рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ! рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд░реНрдХon_stopрдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рднреВрд▓ рдЧрдП рдкрд░рд┐рд╡реЗрд╢ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ... рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХрд╛рдо рдЖрддрд╛ рд╣реИ auto_stop_inред

рдмреЛрдирд╕: рдЕрд╕реНрдерд╛рдпреА рдЭреЛрдкрдбрд╝рд┐рдпреЛрдВ рдЬрдм рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИрдВ


рдЗрди рд╕рднреА (рдФрд░ рдХрдИ рдЕрдиреНрдп) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЧрд┐рдЯрд▓реИрдм рдХреЗ рдирдП рдорд╛рдВрдЧреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрднреА-рдХрднреА рдиреМрдХрд░реА рдкреВрд░реА рдХрд░рдиреЗ рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдЧрд┐рдЯрд▓реИрдм рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдбреНрд░реАрдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ... рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдХрд░ рдорд╛рдореВрд▓реА рдбреАрдПрд╕рдПрд▓ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рдпрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдорд╛рдзрд╛рди рд╕рдВрдЦреНрдпрд╛ 1: рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рджреЛ рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ


script:
  - > 
    export CI_PROD_CL1_JOB_ID=`curl -s -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \ 
      "https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs" | \
      jq '[.[] | select(.name == "Deploy (Cluster 1)")][0] | .id'`
  - > 
    export CI_PROD_CL2_JOB_ID=`curl -s -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \ 
      "https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs" | \
      jq '[.[] | select(.name == "Deploy (Cluster 2)")][0] | .id'`
  - > 
    curl -s --request POST -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \ 
      "https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/jobs/$CI_PROD_CL1_JOB_ID/play"
  - > 
    curl -s --request POST -H "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \ 
      "https://gitlab.domain/api/v4/projects/${CI_PROJECT_ID}/jobs/$CI_PROD_CL2_JOB_ID/play"

рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ, рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдирдВрдмрд░ 2: рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рд░реВрдмреЛрдХреЙрдк рдХреЗ рд▓рд┐рдП рдПрдордЖрд░ рдЖрд░рдмреА-рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдмрджрд▓ рдЧрдпрд╛


Rubocop:
  stage: test
  allow_failure: false
  script:
    ...
    - export VARFILE=$(mktemp)
    - export MASTERCOMMIT=$(git merge-base origin/master HEAD)
    - echo -ne 'CHANGED_FILES=' > ${VARFILE}
    - if [ $(git --no-pager diff --name-only ${MASTERCOMMIT} | grep '.rb$' | wc -w |awk '{print $1}') -gt 0 ]; then
        git --no-pager diff --name-only ${MASTERCOMMIT} | grep '.rb$' |tr '\n' ' ' >> ${VARFILE} ;
      fi
    - if [ $(wc -w ${VARFILE} | awk '{print $1}') -gt 1 ]; then
        werf --stages-storage :local run rails-dev --docker-options="--rm --user app --env-file=${VARFILE}" -- bash -c /scripts/rubocop.sh ;
      fi
    - rm ${VARFILE}

рдЕрдВрджрд░ рдХреЛрдИ рдЫрд╡рд┐ рдирд╣реАрдВ рд╣реИ .git, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдкрдбрд╝рд╛ред

рдиреЛрдЯ: рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреА рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рддрд╛рд╢ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб # 3: рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдиреМрдХрд░реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВ


  before_script:
    - |
      echo '### Trigger review: infra'
      curl -s -X POST \
        -F "token=$REVIEW_TOKEN_INFRA" \
        -F "ref=master" \
        -F "variables[REVIEW_NS]=$CI_ENVIRONMENT_SLUG" \
        -F "variables[ACTION]=auto_review_start" \
        https://gitlab.example.com/api/v4/projects/${INFRA_PROJECT_ID}/trigger/pipeline

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рдЖрд╡рд╢реНрдпрдХ (рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ) рдмрд╛рдд рдПрдХ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд░ рдХреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд░реЛрд▓ рдХрд░ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд) рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  only:
    refs:
    - triggers
    variables:
    - $ACTION == "auto_review_start"

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • рдЯреНрд░рд┐рдЧрд░ рдкрд░ рдиреМрдХрд░реА рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ 1ред рдпрд╣ рдПрдкреАрдЖрдИ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдиреМрдХрд░реА рдХрд╛ рдирд╛рдо рдкрд╛рд░рд┐рдд рд╣реБрдЖ рд╣реИред
  • рд╣рд╛рдВ, рдлрд╝рдВрдХреНрд╢рди рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ (рдИрдИ) рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


GitLab рдЯреНрд░реЗрдВрдбреНрд╕ рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдЦрдж рд╣реИрдВ рдФрд░ рджреЗрд╡рдУрдкреНрд╕ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИрдВред рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИрдВ, рдФрд░ рдЬрдм рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдПрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдорд░реНрдерди рдореЗрдВ рдЗрддрдиреА рднрд╡реНрдпрддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рд╣реИ ... рддреЛ рдпрд╣ рдЧреАрддрд╛рд▓рд╛рдм рдХреА рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╛ рд╣рдорд╛рд░реЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ ред

рдкреБрдирд╢реНрдЪ


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:


All Articles