рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред : рдореВрд▓ рд▓реЗрдЦ Mi┼Вosz Sm├│┼Вka рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдЫреЛрдЯреА рдкреЛрд▓рд┐рд╢ рдХрдВрдкрдиреА рдереНрд░реА рдбреЙрдЯреНрд╕ рд▓реИрдмреНрд╕ рдХреЗ рд╕рдВрд╕реНрдерд╛рдкрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ "рдЙрдиреНрдирдд рдмреИрдХреЗрдВрдб рд╕рдорд╛рдзрд╛рди" рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдЦрдХ GitLab CI рдХреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдУрдкрди рд╕реЛрд░реНрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд┐рдд рдпреБрдХреНрддрд┐рдпрд╛рдБ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рдорд╛рд░реЗ рдХрд┐рддрдиреЗ рдХрд░реАрдм рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдЗрд╕ рдмрд╛рд░ рдореИрдВ GitLab CI рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЧреИрд░-рдорд╛рдирдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдпреБрдХреНрддрд┐рдпрд╛рдБ GitLab рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЕрдиреНрдп CI рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ,
рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдХрд┐рд╕реА рднреА рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдорд╛рдирдХ рд╕реЗрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реНрдХ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдореЛрдХреА рдФрд░ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЛ
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐
рдПрдХреАрдХрд░рдг рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░, рдПрдЪрдЯреАрдЯреАрдкреА рд╕реЗрд╡рд╛, рдХрдиреЗрдХреНрдЯреЗрдб рд╕реНрдЯреЛрд░реЗрдЬ рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ, рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓ рд░рд╣реА рд╣реЛрддреА рд╣реИред
services
рдЙрдкрдпреЛрдЧ рд╕реЗ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдЫрд╡рд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдпрд╛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ
alias
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ MySQL рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
integration_tests: stage: tests services: - name: mysql:8 alias: db script: - ./run_tests.sh db:3306
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдкрдХреЛ
db
рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк
mysql
рдЫрд╡рд┐ рдХреЛ
mariadb
рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред
рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ
рдЪреВрдВрдХрд┐ рдкреНрд▓рдЧ-рдЗрди рдХрдВрдЯреЗрдирд░ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде
рд╡реЗрдЯ-рдлреЙрд░-it.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯред
Docker Compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП,
services
рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдХрд╛рдлреНрдХрд╛ рдФрд░ рдЬрд╝реВрдХреЗрдкрд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ (рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЪрд┐рддреНрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рд╕реЗрд▓реЗрдирд┐рдпрдо рдЬреИрд╕реЗ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛
рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ :
version: '3' services: zookeeper: image: confluentinc/cp-zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 kafka: image: confluentinc/cp-kafka environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 ports: - 9092:9092
рдпрджрд┐ рдЖрдк рднрд░реЛрд╕реЗрдордВрдж рд╕рд░реНрд╡рд░ рдкрд░ GitLab рдзрд╛рд╡рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
рд╢реЗрд▓ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк
рдбреЛрдХрд░ (
dind
)
dind
рдореЗрдВ рдбреЙрдХрд░ рд╣реИ ред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВред
Compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдирд╖реНрдЯ рдХрд░ рджреЗрдирд╛ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
docker-compose up -d ./run_tests.sh localhost:9092 docker-compose down
рдЬрдм рддрдХ рдЖрдк рдиреНрдпреВрдирддрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ... рдбреЙрдХрд░ рдХрдореНрдкреЛрдЬрд╝ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ - рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ:
version: '3' services: zookeeper: image: confluentinc/cp-zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 kafka: image: confluentinc/cp-kafka environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 tests: image: registry.example.com/some-image command: ./run_tests.sh kafka:9092
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдЙрдирдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдПрдХ рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
docker-compose up --exit-code-from tests
--exit-code-from
--abort-on-container-exit
рддрд╛рддреНрдкрд░реНрдп рд╣реИ
--abort-on-container-exit
, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ:
--abort-on-container-exit
рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреВрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЪрдпрдирд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ (рдпрд╛рдиреА рдпреЗ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
tests
рд╣реИрдВ)ред рдпрджрд┐ рдЖрджреЗрд╢ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкреВрд░реНрдг
docker-compose up
рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред
CI рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЪреЗрддрд╛рд╡рдиреА : рдпрд╣ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдФрд░ рд▓рдЪреАрд▓рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, GitLab рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╕рдореВрд╣ рд╕реНрддрд░ рдкрд░ рдПрдХ рд▓реЗрдмрд▓ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИред рд▓реЗрдмрд▓ рдЯрд┐рдХрдЯ рдФрд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред

рдереЛрдбрд╝рд╛ рд╢реЛрдзрди рдЖрдкрдХреЛ рдЬреЙрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓реЗрдмрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред GitLab 11.6 рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
CI_MERGE_REQUEST_IID
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ (рд╣рд╛рдБ, рдпрд╣
IID
рд╕рд╛рде рд╣реИ,
ID
рдирд╣реАрдВ), рдпрджрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди
only: merge_requests
рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ
only: merge_requests
ред
рдпрджрд┐
only: merge_requests
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЖрдк GitLab рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ MR рдХреЛ рдЕрднреА рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - API рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
curl "$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/commits/$CI_COMMIT_SHA/merge_requests?private_token=$GITLAB_TOKEN"
рд╣рдореЗрдВ рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ
iid
ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХрдИ рдПрдордЖрд░ рджрд┐рдП рдЧрдП рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм MR IID рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓
рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз API рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдФрд░ рдЙрддреНрддрд░ рд╕реЗ
labels
рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
curl "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID?private_token=$GITLAB_TOKEN"
рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдордп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
$CI_JOB_TOKEN
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЕрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ (рдЖрдВрддрд░рд┐рдХ рдпрд╛ рдирд┐рдЬреА) рд╣реИ, рддреЛ GitLab API рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд API рдЯреЛрдХрди рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдпрджрд┐ рдЯреЛрдХрди рдЦрд░рд╛рдм рд╣рд╛рдереЛрдВ рдореЗрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЕрдкрдиреА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛрдЦрд┐рдореЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрдврд╝рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдЦрд╛рддрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИред
рдЖрдкрдХреЗ рдЪрд░ рдХрд┐рддрдиреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ?
рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ,
рдЪрд░ рдЦрдВрдб рдХреЛ
рдЧреБрдкреНрдд рдЪрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдереЗ рдФрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЪрд░ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЫрд┐рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдореЗрдВрдЯреЗрдирд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рд░рд┐рд╕рд╛рд╡ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд░рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╣реЛрд╢рд┐рдпрд╛рд░рдкреБрд░ рд╕реЗ рд╡реЙрд▓реНрдЯ )ред
рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд▓реЗрдмрд▓ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:
- рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЧрдореЗрдВрдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЬреИрд╕реЗ
tests:auth
рдЬреИрд╕реЗ рд▓реЗрдмрд▓ tests:auth
, tests:user
) - рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
- рдпрджрд┐ рд▓реЗрдмрд▓ рдореМрдЬреВрдж рд╣реИ рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЙрд▓рд┐рдВрдЧ
рдпрджреНрдпрдкрд┐ рдЧрд┐рдЯрд▓реИрдм рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ
curl
рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ
GitLab Webhooks (рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ
рдПрдХреАрдХрд░рдг рдЯреИрдм рджреЗрдЦреЗрдВ) рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг: рдЧреНрд░рд╛рдлрд╛рдирд╛ рдПрдиреЛрдЯреЗрд╢рди
рдпрджрд┐ рдЖрдк
рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
рдПрдиреЛрдЯреЗрд╢рди рдЪрд╛рд░реНрдЯ рдкрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рди рдХреЗрд╡рд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ GUI рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐
Grafana REST API рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ :

рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреА рд╣реЛрдЧреАред рд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рджреЛ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
GRAFANA_URL
- Grafana рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ URL (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, https://grafana.example.com
);GRAFANA_APIKEY
- API рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдмрдирд╛рдИ рдЧрдИред
рдЗрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рдореЗрдВ рд░рдЦреЗрдВ :
рдЕрдм рдЖрдк рд╕реАрдЖрдИ рдХреЙрд▓ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
deploy: stage: deploy script: - $SCRIPTS_DIR/deploy.sh production - $SCRIPTS_DIR/grafana-annotation.sh "$VERSION deployed to production" deploy-production
рдпреЗ рдХреЙрд▓ CI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
deploy.sh
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмреЛрдирд╕: рддреНрд╡рд░рд┐рдд рд╕реБрдЭрд╛рд╡
GitLab рдореЗрдВ рд╕реАрдЖрдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреАрд╡рд░реНрдб рдкрд░
рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ ред рдореИрдВ рдпрд╣рд╛рдВ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реВрдВрдЧрд╛ред рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
CI рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рдЖрдк рдХреБрдЫ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрддреНрдХрд╛рд▓ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╢ рдлрд┐рдХреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВ:
only: refs: - branches variables: - $CI_COMMIT_REF_NAME =~ /^hotfix/
GitLab рдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ CI рдЬреЙрдм рдореЗрдВ рдХрдИ
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЪрд░ рд╣реИрдВ - рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдирдХрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕рдВрд╕реНрдХрд░рдг 11.3 рд╕реЗ, рдЖрдк
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
.common_before_script: &common_before_script before_script: - ... - ... deploy: <<: *common_before_script
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рд╕рднреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдж рдХреА рд╕рднреА рдиреМрдХрд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрди рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдиреМрдХрд░рд┐рдпрд╛рдВ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордп рдФрд░ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
dependencies: - build
рдпрд╛ - рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВ рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ:
dependencies: []
рдпрджрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрдирд┐рдВрдЧ рдЫреЛрдбрд╝реЗрдВ рддреЛ рдиреМрдХрд░реА рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧреА:
variables: GIT_STRATEGY: none
рд╡рд╣ рд╕рдм рд╣реИ!
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭрд╕реЗ
рдЯреНрд╡рд┐рдЯрд░ рдпрд╛
рд░реЗрдбрд┐рдЯ рдкрд░ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред
рдЕрдзрд┐рдХ GitLab рдпреБрдХреНрддрд┐рдпрд╛рдВ рдкрд┐рдЫрд▓реЗ рдкрджреЛрдВ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ: