αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ HashiCorp Waypoint αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž αž€αžΆαžšαž‡αžΆαž˜αž½αž™ GitLab CI/CD

αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ HashiCorp Waypoint αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž αž€αžΆαžšαž‡αžΆαž˜αž½αž™ GitLab CI/CD

HashiCorp αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž˜αžΈαž˜αž½αž™ αž…αž€αŸ’αžαž»αžœαž·αžŸαŸαž™ αž“αŸ…αž›αžΎ HashiCorp αžŒαžΈαž‡αžΈαžαž›. αžœαžΆαž”αŸ’αžšαžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ HCL αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹ αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αž“αž·αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆαž–αž–αž€αž•αŸ’αžŸαŸαž„αŸ—αž…αžΆαž”αŸ‹αž–αžΈ Kubernetes αžŠαž›αŸ‹ AWS αž“αž·αž„ Google Cloud RunαŸ” αž‚αž·αžαž–αžΈ Waypoint αž‡αžΆ Terraform αž“αž·αž„ Vagrant αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž€αžŸαžΆαž„ αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αž“αž·αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž‡αžΆαž€αžΆαžšαž–αž·αž HashiCorp αž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ Waypoint αž‡αžΆαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž αžΎαž™αžœαžΆαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αžœαž„αŸ‹αž—αŸ’αž›αŸαž„αž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αž“αž€ Waypoint αž˜αž€αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž¬αž–αžΈαž§αž”αž€αžšαžŽαŸ orchestration CI/CD αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž‚αŸ„αž›αžŠαŸ…αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αž“αž€αžŠαŸ‚αžš αžŠαŸ„αž™αžŸαžΆαžš Waypoint αž‚αžΆαŸ†αž‘αŸ’αžš Kubernetes, Docker, Google Cloud Run, AWS ECS αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αžΆαž“αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™ αž―αž€αžŸαžΆαžš αž“αž·αž„αž‘αžΌαž™αž”αŸ†αž•αž»αžαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ HashiCorp αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαž“αŸ‹αžαŸ‚αžŠαž·αžαžŠαž›αŸ‹αž“αŸ… Waypoint orchestration αž‡αžΆαž˜αž½αž™ GitLab CI/CDαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž™αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Node.js αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎ AWS ECS αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αž‚αŸ†αžšαžΌαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αŸ’αž›αžΌαž“αžƒαŸ’αž›αžΆαŸ†αž„ αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž‘αŸ†αž–αŸαžšαž˜αž½αž™αŸ–

αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ HashiCorp Waypoint αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž αž€αžΆαžšαž‡αžΆαž˜αž½αž™ GitLab CI/CD

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžƒαžΎαž‰αžαžΆαž˜αž·αž“αž˜αžΆαž“ 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 (CNB) αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αž˜αž·αž“αž”αŸ’αžšαžΎ Dockerfile αŸ” αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαŸ„αž™ GitLab αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· DevOps αž“αŸ…αž‡αŸ†αž αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžœαžΆαž–αž·αžαž‡αžΆαž›αŸ’αž’αžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αžƒαžΎαž‰αžαžΆ CNB αžšαž”αžŸαŸ‹ CNCF αž€αŸ†αž–αž»αž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‘αž‘αž½αž›αž™αž€αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αžΎαž„αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αžŸαŸ’αžŸαžΆαž αž€αž˜αŸ’αž˜αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αžšαž½αž… Waypoint αž“αžΉαž„αž”αž„αŸ’αž αŸ„αŸ‡αžœαžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ AWS ECR αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαžšαž½αž…αžšαžΆαž›αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αŸ” αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž‡αŸ†αž αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž”αŸ’αžšαžΎ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜ AWS ECS αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž‚αžŽαž“αžΈ AWS αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž–αžΈαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„ Waypoint αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈ AWS αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž αžΎαž™αžœαžΆ "αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš" αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž‘αŸ…αž αž½αžŸαž–αžΈαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†? αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αŸαŸ‡αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžš CI/CD αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžŠαŸ‚αž›αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αž? αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαžšαžΏαž„αžŠαŸ‚αž› GitLab CI/CD αž…αžΌαž›αž˜αž€!

NB αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‘αžΎαž”αžαŸ‚αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž’αž“αž»αžœαžαŸ’αž CI/CD αž¬αž…αž„αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„ αžŸαžΌαž˜αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž›αžΎαžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ Slurm αžαŸ’αž˜αžΈαŸ” "CI/CD αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ Gitlab CI". αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαž’αžΆαž…αžšαž€αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αž›αŸƒαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž‡αžΆαž˜αž»αž“αŸ”

Waypoint αž“αŸ…αž€αŸ’αž“αž»αž„ GitLab CI/CD

αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ GitLab CI/CD αžŸαžΌαž˜αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ .gitlab-ci.yml:

  • αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αžœαžΆαŸ” Waypoint αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αžŽαžΆαž˜αž½αž™ αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ‚ Docker αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžšαžΌαž”αž—αžΆαž– Docker αž‘αžΌαž‘αŸ…αŸ”
  • αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„ Waypoint αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αŸ” αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αŸ” αžšαžΌαž”αž—αžΆαž–αž”αž„αŸ’αž€αžΎαžαž˜αŸαžαžΆ αž“αž·αž„αžšαŸ€αž”αž…αŸ†αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αŸ”
  • αž‘αžΈαž”αŸ†αž•αž»αžαž™αžΎαž„αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ Waypoint

αžαžΆαž„αž›αžΎαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹ AWS αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžšαžΏαž„αž˜αž½αž™αž‘αŸ€αžαŸ– αž™αžΎαž„αžαŸ’αžšαžΌαžœαž…αžΌαž›αž‘αŸ…αž‚αžŽαž“αžΈ AWS αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆ Waypoint αž˜αžΆαž“αž•αŸ‚αž“αž€αžΆαžš αž’αŸ†αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ” HashiCorp αž€αŸαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž˜αž½αž™αž“αŸ…αžŸαž”αŸ’αžαžΆαž αŸαž“αŸαŸ‡αŸ” αž–αŸ’αžšαŸ†αžŠαŸ‚αž“. αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€ αž“αž·αž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ GitLab CICD αž“αŸ…αž›αžΎ AWS αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ†αž”αžΌαž„αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ αž αžΆαžŸαŸ‹αžŸαŸŠαžΈαž€αžΌαž”αžœαŸ‰αžΆαž€. αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Vault αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž½αž…αž αžΎαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αžšαž»αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ AWS IAM αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž€αž·αž…αŸ’αž…αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆ αž’αŸ’αž“αž€αžšαžαŸ‹ GitLabA αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαžΆαž˜αžšαž™αŸˆ IAM αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž„αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹ Waypoint αž αžΎαž™αž…αž„αŸ‹αž’αŸ’αžœαžΎαžœαžΆαž±αŸ’αž™αž”αžΆαž“αž›αžΏαž“ αž‡αž˜αŸ’αžšαžΎαžŸαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜ AWS API αž“αž·αž„ Secret keys αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ GitLab CI/CD 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. αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž’αŸ’αž“αž€αžšαžαŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„ AWS αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš waypoint init, build, deploy ΠΈ release.

αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž™αžΎαž„αž“αžΌαžœαž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ–

αžšαž”αŸ€αž”αž”αŸ’αžšαžΎ HashiCorp Waypoint αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž αž€αžΆαžšαž‡αžΆαž˜αž½αž™ GitLab CI/CD

αž…αŸ†αžŽαž»αž…αž˜αž½αž™αž“αŸƒ αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ HashiCorp αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž‡αžΆαž˜αž½αž™ GitLab αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž™αžΎαž„αž’αžΆαž…αžšαŸ€αž”αž…αŸ†αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž˜αž½αž™ Terraform αž“αŸ…αž€αŸ’αž“αž»αž„ GitLab. αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– SDLC αž™αžΎαž„αž€αŸαž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž•αž„αžŠαŸ‚αžšαŸ” GitLab αž‡αžΆαž˜αž½αž™ Vault αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ αž“αž·αž„αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αž–αž„αŸ‹ CI/CD αžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αŸαž‰αž›αŸαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž“αž·αž„αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ‚αž›αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αž›αž·αžαž€αž˜αŸ’αž˜αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαž½αž˜αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ HashiCorp αž“αž·αž„ GitLab αž‡αž½αž™αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž“αžΆαž“αžΆαžŸαŸ’αžœαŸ‚αž„αžšαž€αžœαž·αž’αžΈαž›αŸ’αž’αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž’αžΆαž“αžΆαž“αžΌαžœαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž•αŸ’αž‚αžαŸ‹αž•αŸ’αž‚αž„αŸ‹αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ αž“αž·αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” Waypoint αž”αžΆαž“αž”αŸ„αŸ‡αž‡αŸ†αž αžΆαž“αž˜αž½αž™αž‘αŸ€αžαž€αŸ’αž“αž»αž„αž‘αž·αžŸαžŠαŸ…αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αž™αžΎαž„αž‘αž“αŸ’αž‘αžΉαž„αžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈ Waypoint αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž€αŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž»αž€αžšαž€αž•αž„αžŠαŸ‚αžšαŸ” αž―αž€αžŸαžΆαžš ΠΈ αž•αŸ‚αž“αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ… αž―αž€αžŸαžΆαžš GitLab CICD. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž€αžΆαžšαž„αžΆαžšαž–αŸαž‰αž›αŸαž‰αž“αŸ… αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸαŸ‡αŸ”.

αž’αŸ’αž“αž€αž’αžΆαž…αž™αž›αŸ‹αž–αžΈαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒ CI/CD αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ subtleties αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Gitlab CI αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŠαŸ„αž™αž”αž‰αŸ’αž…αž”αŸ‹αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαžœαžΈαžŠαŸαž’αžΌ "CI/CD αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ Gitlab CI". αž…αžΌαž›αžšαž½αž˜αž₯αž‘αžΌαžœαž“αŸαŸ‡!

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹