HashiCorp рд▓реЗ рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреЗрдЦрд╛рдпреЛ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдкрдорд╛, HashiCorp рд▓реЗ рдЦреБрд▓рд╛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ Waypoint рдЬрд╛рд░реА рдЧрд░реЗрдХреЛ рдЫ, рд░ рдпреЛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдХреЛ рд╕рд╛рде рдЖрдЙрдБрдЫред рдЕрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░рдХреЛ рд╕реНрддрд░ рддрдкрд╛рдИрдВрдорд╛ рдирд┐рд░реНрднрд░ рдЫ, рд╡реЗрдкреЛрдЗрдиреНрдЯ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдпрдХреЛ рд░реВрдкрдорд╛ рдЖрдЙрдБрдЫ рдЬреБрди рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рд▓реНрдпрд╛рдкрдЯрдкрдорд╛ рд╡рд╛ рддрдкрд╛рдИрдВрдХреЛ рдЫрдиреМрдЯрдХреЛ CI/CD рдЕрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЙрдкрдХрд░рдгрдмрд╛рдЯ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд▓рдХреНрд╖реНрдп рдкрдирд┐ рддрдкрд╛рдИрдВрдорд╛ рдирд┐рд░реНрднрд░ рдЫ, рдХрд┐рдирдХрд┐ Waypoint рд▓реЗ Kubernetes, Docker, Google Cloud Run, AWS ECS, рд░ рдердкрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред
рдЧрдЬрдм рдкрдвреЗ рдкрдЫрд┐
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрдирд┐рдЩ рдкрдЫрд┐, рдПрдЙрдЯрд╛ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд╕рдВрд░рдЪрдирд╛ рд╣реЗрд░реМрдВ:
рддрдкрд╛рдИрдВрд▓реЗ рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫ, рдпрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдХреБрдиреИ рдбрдХрд░рдлрд╛рдЗрд▓ рдЫреИрдиред рддрд┐рдиреАрд╣рд░реВ рдЙрджрд╛рд╣рд░рдгрдорд╛ рдердкрд┐рдПрдХрд╛ рдЫреИрдирдиреН рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрди, рдХрд┐рдирднрдиреЗ Waypoint рд▓реЗ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╣реЗрд░рдЪрд╛рд╣ рдЧрд░реНрдиреЗрдЫред рдлрд╛рдИрд▓рд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВ 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"
}
}
}
рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгрдХреЛ рдмрдЦрдд, рд╡реЗрдкреЛрдЗрдиреНрдЯрд▓реЗ рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рдн рдмрд┐рд▓реНрдбрдкреНрдпрд╛рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ (
рдПрдХ рдкрдЯрдХ рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рднрдПрдкрдЫрд┐, Waypoint рд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╣рд╛рдореНрд░реЛ AWS ECR рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрдиреЗрдЫ рддрд╛рдХрд┐ рдпреЛ рдкрдард╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЫред рд╡рд┐рдзрд╛рдирд╕рднрд╛рдХреЛ рдЕрдиреНрддреНрдпрдорд╛, рд╡рд┐рддрд░рдг рдЪрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ
рдореЗрд░реЛ рд▓реНрдпрд╛рдкрдЯрдкрдмрд╛рдЯ рдпреЛ рд╕рдЬрд┐рд▓реЛ рдЫред рдореИрд▓реЗ Waypoint рдорд╛ рд░рд╛рдЦреЗрдВ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ рдореЗрд░реЛ AWS рдЦрд╛рддрд╛рдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдпрд╕рд▓реЗ "рдХреЗрд╡рд▓ рдХрд╛рдо рдЧрд░реНрджрдЫ"ред рддрд░ рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рдо рдореЗрд░реЛ рд▓реНрдпрд╛рдкрдЯрдк рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рди рдЪрд╛рд╣рдиреНрдЫреБ? рд╡рд╛ рд╣реБрдирд╕рдХреНрдЫ рдо рдпреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирд▓рд╛рдИ рдореЗрд░реЛ рд╕рдордЧреНрд░ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рдЬрд╣рд╛рдБ рдореЗрд░реЛ рд╣рд╛рд▓рдХреЛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ, рд╕реБрд░рдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ, рд░ рдЕрдиреНрдпрд╣рд░реВ рдЪрд▓реНрдЫрдиреН? рдпреЛ рдХрдерд╛рдХреЛ рдЕрдВрд╢ рд╣реЛ рдЬрд╣рд╛рдБ GitLab CI/CD рдЖрдЙрдБрдЫ!
рдПрдирдмреА рдпрджрд┐ рддрдкрд╛рдЗрдБ рднрд░реНрдЦрд░ CI / CD рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдЙрдБрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдирдпрд╛рдБ Slurm рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реНред
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
рд░ Waypoint рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреЗрд╣рд┐ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдзреНрдпрд╛рдпрдорд╛ script
рд╣рд╛рдореА рдирд╡реАрдирддрдо рд╡реЗрдкреЛрдЗрдиреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рд░рд╛рдЦреНрдЫреМрдВ /usr/local/bin
ред рд╣рд╛рдореНрд░реЛ рдзрд╛рд╡рдХ рдкрд╣рд┐рд▓реЗ рдиреИ AWS рдорд╛ рдЕрдзрд┐рдХреГрдд рднрдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, рд╣рд╛рдореА рдХреЗрд╡рд▓ рджреМрдбрдиреНрдЫреМрдВ waypoint init
, build
, deploy
╨╕ release
.
рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпрдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ рджреЗрдЦрд╛рдЙрдиреЗрдЫ рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░реЛрд▓ рдЧрд░реНрдпреМрдВ:
рд╡реЗрдкреЛрдЗрдиреНрдЯ рдордзреНрдпреЗ рдПрдХ
HashiCorp рд░ GitLab рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рд╕рдВрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рдирд╣рд░реВрд▓реЗ рдХрдореНрдкрдиреАрд╣рд░реВрд▓рд╛рдИ рд▓рдЧрд╛рддрд╛рд░ рдЖрдкреВрд░реНрддрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реЗрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рдЦреЛрдЬреНрди рдорджреНрджрдд рдЧрд░реНрджрдЫред рд╡реЗрдкреЛрдЗрдиреНрдЯрд▓реЗ рд╕рд╣реА рджрд┐рд╢рд╛рдорд╛ рдЕрд░реНрдХреЛ рдХрджрдо рдЪрд╛рд▓реЗрдХреЛ рдЫ рд░ рд╣рд╛рдореА рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдердк рд╡рд┐рдХрд╛рд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрддреНрдкрд░ рдЫреМрдВред рддрдкрд╛рдИрдВрд▓реЗ Waypoint рдмрд╛рд░реЗ рдердк рдЬрд╛рдиреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рддрдкрд╛рдИрдВ CI / CD рдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдмреБрдЭреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, Gitlab CI рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдмреИ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВ рдорд╛рд╕реНрдЯрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рднрд┐рдбрд┐рдпреЛ рдХреЛрд░реНрд╕ рдкреВрд░рд╛ рдЧрд░реЗрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рд╕реНрд░реЛрдд: www.habr.com