HashiCorp рдиреЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджрд┐рдЦрд╛рдпрд╛
рд╕рд╣реА рд░реВрдк рдореЗрдВ, рд╣рд╛рд╢реАрдХреЙрд░реНрдк рдиреЗ рд╡реЗрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИред рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рдкрд░рдд рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИ, рд╡реЗрдкреЙрдЗрдВрдЯ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдпрд╛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд╕реАрдЖрдИ/рд╕реАрдбреА рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рднреА рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдкреЙрдЗрдВрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдбреЙрдХрд░, рдЧреВрдЧрд▓ рдХреНрд▓рд╛рдЙрдб рд░рди, рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрд╕реАрдПрд╕ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЕрджреНрднреБрдд рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдПрдХ рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдкреЙрдЗрдВрдЯ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдирдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░реЗрдЧрд╛ред рдЖрдЗрдП рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ waypoint.hcl
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛:
project = "example-nodejs"
app "example-nodejs" {
labels = {
"service" = "example-nodejs",
"env" = "dev"
}
build {
use "pack" {}
registry {
use "aws-ecr" {
region = "us-east-1"
repository = "waypoint-gitlab"
tag = "latest"
}
}
}
deploy {
use "aws-ecs" {
region = "us-east-1"
memory = "512"
}
}
}
рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рд╡реЗрдкреЙрдЗрдВрдЯ рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рдмрд┐рд▓реНрдбрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (
рдПрдХ рдмрд╛рд░ рдЫрд╡рд┐ рдмрди рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗрдкреЙрдЗрдВрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рдорд╛рд░реА AWS ECR рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛред рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдбрд┐рд▓реАрд╡рд░реА рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рд╕реЗ тАЛтАЛ- рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд╡реЗрдкреЙрдЗрдВрдЯ рдбрд╛рд▓рд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ рдФрд░ рдпрд╣ "рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рд╕реЗ тАЛтАЛрдЖрдЧреЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЕрдЪрд╛рдирдХ рдЗрд╕ рддреИрдирд╛рддреА рдХреЛ рдЕрдкрдиреА рд╕рдордЧреНрд░ рд╕реАрдЖрдИ/рд╕реАрдбреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдЪрд▓ рд░рд╣реЗ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг, рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЕрдиреНрдп рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ? рдпрд╣ рдХрд╣рд╛рдиреА рдХрд╛ рд╡рд╣ рднрд╛рдЧ рд╣реИ рдЬрд╣рд╛рдБ GitLab CI/CD рдЖрддреА рд╣реИ!
рдПрдирдмреА рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕реАрдЖрдИ/рд╕реАрдбреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд▓рдо рдХреЗ рдирдП рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ
"рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Gitlab CI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП CI/CD" . рдпрд╣ рдЕрдм рдкреНрд░реА-рдСрд░реНрдбрд░ рдХреАрдордд рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
GitLab CI/CD рдореЗрдВ рд╡реЗрдкреЙрдЗрдВрдЯ
GitLab CI/CD рдореЗрдВ рдпрд╣ рд╕рдм рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП .gitlab-ci.yml
:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реЗрдкреЙрдЗрдВрдЯ рдХрд┐рд╕реА рднреА рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреЗрд╡рд▓ рдбреЙрдХрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред
- рдЖрдЧреЗ рдЖрдкрдХреЛ рдЗрд╕ рдЫрд╡рд┐ рдореЗрдВ рд╡реЗрдкреЙрдЗрдВрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЫрд╡рд┐ рдореЗрдЯрд╛ рдмрд┐рд▓реНрдб рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдХрд░реЗрдВред - рдЕрдВрдд рдореЗрдВ рд╣рдо рд╡реЗрдкреЙрдЗрдВрдЯ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ
рдЙрдкрд░реЛрдХреНрдд рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рддреИрдирд╛рддреА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди AWS рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЪреАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рд╣рдореЗрдВ рдЕрдкрдиреЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗрдкреЙрдЗрдВрдЯ рд╡рд┐рд╡рд░рдг рдореЗрдВ
AWS рдореЗрдВ GitLab CICD рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмрд┐рд▓реНрдЯ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ AWS_ACCESS_KEY_ID
╨╕ AWS_SECRET_ACCESS_KEY
.
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдбрд╛рд▓реЗрдВ
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд╕рдордЭ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рдорд╛рд░рд╛ рдлрд╛рдЗрдирд▓ .gitlab-ci.yml
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
waypoint:
image: docker:latest
stage: build
services:
- docker:dind
# Define environment variables, e.g. `WAYPOINT_VERSION: '0.1.1'`
variables:
WAYPOINT_VERSION: ''
WAYPOINT_SERVER_ADDR: ''
WAYPOINT_SERVER_TOKEN: ''
WAYPOINT_SERVER_TLS: '1'
WAYPOINT_SERVER_TLS_SKIP_VERIFY: '1'
script:
- wget -q -O /tmp/waypoint.zip https://releases.hashicorp.com/waypoint/${WAYPOINT_VERSION}/waypoint_${WAYPOINT_VERSION}_linux_amd64.zip
- unzip -d /usr/local/bin /tmp/waypoint.zip
- rm -rf /tmp/waypoint*
- waypoint init
- waypoint build
- waypoint deploy
- waypoint release
рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рдЫрд╡рд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ docker:latest
рдФрд░ рд╡реЗрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрдИ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдзреНрдпрд╛рдп рдореЗрдВ script
рд╣рдо рд╡реЗрдкреЙрдЗрдВрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ /usr/local/bin
. рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░рд╛ рдзрд╛рд╡рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AWS рдореЗрдВ рдЕрдзрд┐рдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд╕ рджреМрдбрд╝рддреЗ рд╣реИрдВ waypoint init
, build
, deploy
╨╕ release
.
рдмрд┐рд▓реНрдб рдХрд╛рд░реНрдп рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрдВ рд╡рд╣ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рдерд╛:
рд╡реЗрдкреЙрдЗрдВрдЯ рдореЗрдВ рд╕реЗ рдПрдХ
HashiCorp рдФрд░ GitLab рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рд╕рдВрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдбрд┐рд▓реАрд╡рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд╡реЗрдкреЙрдЗрдВрдЯ рдиреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░рдВрддрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рд╡реЗрдкреЙрдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрдк рд╕реАрдЖрдИ/рд╕реАрдбреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЛрд░реНрд╕ рдХрд░рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрд░реЛрдд: www.habr.com