
HashiCorp ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° . ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ HCL Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ Π²ΡΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, Π½Π°ΡΠΈΠ½Π°Ρ ΠΎΡ Kubernetes ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ AWS ΠΈ Google Cloud Run. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ, ΡΡΠΎ Waypoint β ΡΡΠΎ ΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ Terraform ΠΈ Vagrant Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ Π²ΡΠΏΡΡΠΊΠ° Π²Π°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΡΠ΅Π±Π΅, HashiCorp Π²ΡΠΏΡΡΡΠΈΠ»Π° Waypoint Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². Π£ΡΠΎΠ²Π΅Π½Ρ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ Π·Π° Π²Π°ΠΌΠΈ, Waypoint ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΡΠΌΠΈΠΊΠΎΠΌ Π½Π° Π²Π°ΡΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΈΠ· Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ CI/CD. Π¦Π΅Π»Ρ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Waypoint ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Kubernetes, Docker, Google Cloud Run, AWS ECS ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠΎΡΠΈΡΠ°Π² ΡΠ»Π΅ΡΠ½ΡΡ ΠΈ ΡΠΈΠΊΠ°ΡΠ½Π΅ΠΉΡΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ HashiCorp, ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²Π·Π³Π»ΡΠ½ΡΡΡ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ Π½Π° ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΡ Waypoint Ρ ΠΏΠΎΠΌΠΎΡΡΡ GitLab CI/CD. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΌΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Node.js, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ΅ Π½Π° 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 (), ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ Docker Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Dockerfile. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΡΡΠΎ ΡΠ° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ GitLab Π² ΡΠ°ΡΡΠΈ Π½Π° ΡΠ°Π³Π΅ Auto Build. ΠΡΠΈΡΡΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ CNB ΠΎΡ CNCF ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ· ΠΎΡΡΠ°ΡΠ»ΠΈ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π· ΡΠΎΠ±ΡΠ°Π½, Waypoint Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ³ΡΡΠ·ΠΈΡ Π΅Π³ΠΎ Π² Π½Π°ΡΡ AWS ECR registry, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» Π³ΠΎΡΠΎΠ² ΠΊ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°Π³ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π½Π°ΡΡ ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ AWS.
Π‘ ΠΌΠΎΠ΅Π³ΠΎ Π½ΠΎΡΡΠ±ΡΠΊΠ° β Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ. Π― ΡΡΠ°Π²Π»Ρ Waypoint, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΌΠΎΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ AWS, ΠΈ ΠΎΠ½ΠΎ Β«ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ». ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π·Π°Ρ ΠΎΡΡ Π²ΡΠΉΡΠΈ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ Π½ΠΎΡΡΠ±ΡΠΊΠ°? ΠΠ»ΠΈ Π²Π΄ΡΡΠ³ Ρ Ρ ΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° CI/CD, Π³Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΌΠΎΠΈ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ, ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅? ΠΡΠΎ ΡΠ° ΡΠ°ΡΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°, Π³Π΄Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ GitLab CI/CD!
N.B. ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ CI/CD ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΊΡΡΡ Π‘Π»ΡΡΠΌΠ° . Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ ΡΠ΅Π½Π΅ ΠΏΡΠ΅Π΄Π·Π°ΠΊΠ°Π·Π°.
Waypoint Π² GitLab CI/CD
ΠΠ»Ρ ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ Π² GitLab CI/CD Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ .gitlab-ci.yml:
- Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½ΡΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ. Waypoint ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π΅ Linux, Π΅ΠΌΡ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Docker, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Ρ generic ΠΎΠ±ΡΠ°Π·Π° Docker.
- ΠΠ°Π»Π΅Π΅ Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Waypoint Π² ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π·. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ.
- ΠΠ°ΠΊΠΎΠ½Π΅Ρ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Waypoint
ΠΡΡΠ΅ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½ΡΠΆΠ½ΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ², Π½ΠΎ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π² AWS Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡ: ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ AWS. Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Waypoint ΠΎΠ± Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ. HashiCorp Π½Π° ΡΡΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΡΡΡΠΈΠ»Π° Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ . ΠΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π²Π·ΡΡΡ ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ.
ΠΠ»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ GitLab CICD Π² AWS Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ . ΠΠ½ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Vault Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ AWS IAM β ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· , Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· IAM. ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠΈΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Waypoint ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ±ΡΡΡΡΠ΅Π΅, Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²Π°ΡΠΈ ΠΊΠ»ΡΡΠΈ AWS API ΠΈ Secret Π² 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 ΠΎΠ΄Π½ΠΎ ΠΈΠ· , ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ GitLab. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΠ΅ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ . ΠΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ SDLC, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π²Π½Π΅Π΄ΡΠΈΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°Ρ CI/CD, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ², ΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΡ ΡΡ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ HashiCorp ΠΈ GitLab, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌ Π½Π°ΠΉΡΠΈ Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ. Waypoint ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π² Π²Π΅ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΈ ΠΌΡ Ρ Π½Π΅ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Waypoint , ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΈΠ·ΡΡΠΈΡΡ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ Π·Π½Π°Π½ΠΈΡ Π² . ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π² ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π² .
ΠΠΎΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ CI/CD, ΠΎΡΠ²ΠΎΠΈΡΡ Π²ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Gitlab CI ΠΈ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠΉΠ΄Ρ Π²ΠΈΠ΄Π΅ΠΎΠΊΡΡΡ . ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
