HashiCorp рдиреЗ рдПрдХ рдирд╡реАрди рдкреНрд░рдХрд▓реНрдк рджрд╛рдЦрд╡рд▓рд╛
рд╣реЗ рдЦрд░реЗ рдЖрд╣реЗ, HashiCorp рдиреЗ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рд╡реЗрдкреЙрдИрдВрдЯ рдЬрд╛рд░реА рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЖрдгрд┐ рддреЗ рдЕрдиреЗрдХ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рдпреЗрддреЗ. рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░рдЪреА рдкрд╛рддрд│реА рддреБрдордЪреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ, рд╡реЗрдкреЙрдЗрдВрдЯ рдПрдХ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдореНрд╣рдгреВрди рдпреЗрддреЛ рдЬреЛ рддреБрдореНрд╣реА рдереЗрдЯ рддреБрдордЪреНрдпрд╛ рд▓реЕрдкрдЯреЙрдкрд╡рд░ рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рдЖрд╡рдбреАрдЪреНрдпрд╛ CI/CD рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓рд╡рд░реВрди рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛. ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдЯрд╛рд░реНрдЧреЗрдЯ рджреЗрдЦреАрд▓ рддреБрдордЪреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ, рдХрд╛рд░рдг рд╡реЗрдкреЙрдИрдВрдЯ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕, рдбреЙрдХрд░, Google рдХреНрд▓рд╛рдЙрдб рд░рди, AWS ECS рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ.
рдЕрдкреНрд░рддрд┐рдо рд╡рд╛рдЪрд▓реНрдпрд╛рдирдВрддрд░
рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдПрдХ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рд░рдЪрдирд╛ рдкрд╛рд╣реВрдпрд╛:
рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдЕрд╕реЗрд▓ рдХреА, рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рдХреЛрдгрддреАрд╣реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдирд╛рд╣реА. рддреЗ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреА рдЦрд░реЛрдЦрд░ рдЧрд░рдЬ рдирд╛рд╣реА, рдХрд╛рд░рдг рд╡реЗрдкреЙрдИрдВрдЯ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреА рдХрд╛рд│рдЬреА рдШреЗрдИрд▓. рдЪрд▓рд╛ рдлрд╛рдИрд▓ рдЬрд╡рд│реВрди рдкрд╛рд╣реВ 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 рдЦрд╛рддреНрдпрд╛рдордзреНрдпреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ "рдлрдХреНрдд рдХрд╛рд░реНрдп рдХрд░рддреЗ". рдкрдг рдорд▓рд╛ рдорд╛рдЭреНрдпрд╛ рд▓реЕрдкрдЯреЙрдкрдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЬрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рдХрд╛рдп рд╣реЛрдИрд▓? рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдорд▓рд╛ рдорд╛рдЭреНрдпрд╛ рдПрдХреВрдг CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рд╣реА рддреИрдирд╛рддреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рдЬрд┐рдереЗ рдорд╛рдЭреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд╛рдЪрдгреНрдпрд╛, рд╕реБрд░рдХреНрд╖рд╛ рдЪрд╛рдЪрдгреНрдпрд╛ рдЖрдгрд┐ рдЗрддрд░ рдЪрд╛рд▓рддрд╛рдд? рд╣рд╛ рдХрдереЗрдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ рдЬрд┐рдереЗ GitLab CI/CD рдпреЗрддреЗ!
рдиреЛ рдмреЙрд▓ рдЬрд░ рддреБрдореНрд╣реА рдлрдХреНрдд 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 рджреНрд╡рд╛рд░реЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реА рд╕рдВрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рдиреЗ рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рдкреБрд░рд╡рдард╛ рд╕рд╛рдЦрд│реА рдЖрдгрд┐ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд╛рд░реНрдЧ рд╢реЛрдзрдгреНрдпрд╛рдд рдХрдВрдкрдиреНрдпрд╛рдВрдирд╛ рдорджрдд рдХрд░рддрд╛рдд. рд╡реЗрдкреЙрдИрдВрдЯрдиреЗ рдпреЛрдЧреНрдп рджрд┐рд╢реЗрдиреЗ рдЖрдгрдЦреА рдПрдХ рдкрд╛рдКрд▓ рдЯрд╛рдХрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рдЙрддреНрд╕реБрдХ рдЖрд╣реЛрдд. рддреБрдореНрд╣реА Waypoint рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреЗрдК рд╢рдХрддрд╛
рддреБрдореНрд╣реА CI/CD рдЪреА рддрддреНрддреНрд╡реЗ рд╕рдордЬреВрди рдШреЗрдК рд╢рдХрддрд╛, Gitlab CI рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдмрд╛рд░рдХрд╛рд╡реЗ рдкрд╛рд░ рдкрд╛рдбреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдХреЛрд░реНрд╕ рдкреВрд░реНрдг рдХрд░реВрди рд╕рд░реНрд╡реЛрддреНрддрдо рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com