HashiCorp ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΡΠ΅Π±Π΅, HashiCorp Π²ΡΠΏΡΡΡΠΈΠ»Π° Waypoint Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². Π£ΡΠΎΠ²Π΅Π½Ρ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ Π·Π° Π²Π°ΠΌΠΈ, Waypoint ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΡΠΌΠΈΠΊΠΎΠΌ Π½Π° Π²Π°ΡΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΈΠ· Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ CI/CD. Π¦Π΅Π»Ρ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Waypoint ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Kubernetes, Docker, Google Cloud Run, AWS ECS ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠΎΡΠΈΡΠ°Π² ΡΠ»Π΅ΡΠ½ΡΡ
ΠΠΎΡΠ»Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ:
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅Ρ Dockerfile. ΠΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ Π½Π°ΠΌ, Π²Π΅Π΄Ρ 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 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Cloud Native Buildpacks (
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π· ΡΠΎΠ±ΡΠ°Π½, Waypoint Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ³ΡΡΠ·ΠΈΡ Π΅Π³ΠΎ Π² Π½Π°ΡΡ AWS ECR registry, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» Π³ΠΎΡΠΎΠ² ΠΊ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°Π³ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
Π‘ ΠΌΠΎΠ΅Π³ΠΎ Π½ΠΎΡΡΠ±ΡΠΊΠ° β Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ. Π― ΡΡΠ°Π²Π»Ρ Waypoint, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ AWS, ΠΈ ΠΎΠ½ΠΎ Β«ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ». ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π·Π°Ρ ΠΎΡΡ Π²ΡΠΉΡΠΈ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ Π½ΠΎΡΡΠ±ΡΠΊΠ°? ΠΠ»ΠΈ Π²Π΄ΡΡΠ³ Ρ Ρ ΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° CI/CD, Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΌΠΎΠΈ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ, ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅? ΠΡΠΎ ΡΠ° ΡΠ°ΡΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°, Π³Π΄Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ GitLab CI/CD!
N.B. ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ CI/CD ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΊΡΡΡ Π‘Π»ΡΡΠΌΠ°
Β«CI/CD Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Gitlab CIΒ» . Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ ΡΠ΅Π½Π΅ ΠΏΡΠ΅Π΄Π·Π°ΠΊΠ°Π·Π°.
Waypoint Π² GitLab CI/CD
ΠΠ»Ρ ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ Π² GitLab CI/CD Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ .gitlab-ci.yml
:
- Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½ΡΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ. Waypoint ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π΅ Linux, Π΅ΠΌΡ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Docker, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ generic ΠΎΠ±ΡΠ°Π·Π° Docker.
- ΠΠ°Π»Π΅Π΅ Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Waypoint Π² ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π·. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±ΡΠ°ΡΡ
ΠΎΠ±ΡΠ°Π· meta build ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ. - ΠΠ°ΠΊΠΎΠ½Π΅Ρ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Waypoint
ΠΡΡΠ΅ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½ΡΠΆΠ½ΡΡ
Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ², Π½ΠΎ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π² AWS Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡ: ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ AWS. Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Waypoint
ΠΠ»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ GitLab CICD Π² AWS Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ 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
ΠΌΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Waypoint ΠΈ ΡΡΠ°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² /usr/local/bin
. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ runner ΡΠΆΠ΅ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½ Π² AWS, Π΄Π°Π»Π΅Π΅ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ waypoint init
, build
, deploy
ΠΈ release
.
ΠΡΠ²ΠΎΠ΄ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π°ΠΌ endpoint, ΠΊΡΠ΄Π° ΠΌΡ ΡΠ°ΡΠΊΠ°ΡΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
Waypoint ΠΎΠ΄Π½ΠΎ ΠΈΠ·
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ HashiCorp ΠΈ GitLab, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌ Π½Π°ΠΉΡΠΈ Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ. Waypoint ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π² Π²Π΅ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΈ ΠΌΡ Ρ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Waypoint
ΠΠΎΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ CI/CD, ΠΎΡΠ²ΠΎΠΈΡΡ Π²ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Gitlab CI ΠΈ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠΉΠ΄Ρ Π²ΠΈΠ΄Π΅ΠΎΠΊΡΡΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com