ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-HashiCorp Waypoint ื›ื“ื™ ืœืฉืชืฃ ืคืขื•ืœื” ืขื GitLab CI/CD

ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-HashiCorp Waypoint ื›ื“ื™ ืœืฉืชืฃ ืคืขื•ืœื” ืขื GitLab CI/CD

HashiCorp ื”ืฆื™ื’ ืคืจื•ื™ืงื˜ ื—ื“ืฉ ื ืงื•ื“ืช ืฆื™ื•ืŸ ืขืœ HashiCorp Digital. ื”ื•ื ืžืฉืชืžืฉ ื‘ืงื•ื‘ืฅ ืžื‘ื•ืกืก HCL ื›ื“ื™ ืœืชืืจ ืืช ื”ื‘ื ื™ื™ื”, ื”ืžืกื™ืจื” ื•ื”ืฉื—ืจื•ืจ ืฉืœ ื™ื™ืฉื•ืžื™ื ืขื‘ื•ืจ ืžื’ื•ื•ืŸ ืคืœื˜ืคื•ืจืžื•ืช ืขื ืŸ, ื”ื—ืœ ืž-Kubernetes ืœ-AWS ื•ืขื“ ืœ-Google Cloud Run. ืืชื” ื™ื›ื•ืœ ืœื—ืฉื•ื‘ ืขืœ Waypoint ื‘ืชื•ืจ Terraform ื•- Vagrant ื‘ืฉื™ืœื•ื‘ ื›ื“ื™ ืœืชืืจ ืืช ืชื”ืœื™ืš ื”ื‘ื ื™ื™ื”, ื”ืžืฉืœื•ื— ื•ื”ืฉื—ืจื•ืจ ืฉืœ ื”ื™ื™ืฉื•ืžื™ื ืฉืœืš.

ื ืืžื ื” ืœืฆื•ืจื”, HashiCorp ืฉื—ืจืจื” ืืช Waypoint ื›ืงื•ื“ ืคืชื•ื— ื•ืžื’ื™ืขื” ืขื ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช. ืฉื›ื‘ืช ื”ืชื–ืžื•ืจืช ืชืœื•ื™ื” ื‘ืš, Waypoint ืžื’ื™ืขื” ื›ืงื•ื‘ืฅ ื”ืคืขืœื” ืฉืืชื” ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื™ืฉื™ืจื•ืช ืขืœ ื”ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœืš ืื• ืžื›ืœื™ ืชื–ืžื•ืจ ื”-CI/CD ืœื‘ื—ื™ืจืชืš. ื”ื™ืขื“ ืœืคืจื™ืกืช ื”ืืคืœื™ืงืฆื™ื•ืช ืฉืœืš ืชืœื•ื™ ื’ื ื‘ืš, ืฉื›ืŸ Waypoint ืชื•ืžื›ืช ื‘-Kubernetes, Docker, Google Cloud Run, AWS ECS ื•ืขื•ื“.

ืื—ืจื™ ืฉืงืจืืชื™ ืืช ื”ืžื“ื”ื™ื ืชื™ืขื•ื“ ื•ื”ื›ื™ ื™ื•ืงืจืชื™ ื“ื•ื’ืžืื•ืช ื™ื™ืฉื•ืžื™ื ืฉืกื•ืคืงื• ืขืœ ื™ื“ื™ HashiCorp, ื”ื—ืœื˜ื ื• ืœื”ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ืชื–ืžื•ืจ ื ืงื•ื“ื•ืช ื“ืจืš ื‘ืืžืฆืขื•ืช 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 ืžืฉืชืžืฉืช ื‘ื—ืœืงื” Auto DevOps ื‘ืฉืœื‘ ื”ื‘ื ื™ื™ื” ื”ืื•ื˜ื•ืžื˜ื™ืช. ื˜ื•ื‘ ืœืจืื•ืช ืฉื”-CNB ืฉืœ CNCF ื–ื•ื›ื” ืœืื™ืžื•ืฅ ืจื‘ ื™ื•ืชืจ ื‘ืงืจื‘ ืžืฉืชืžืฉื™ ื”ืชืขืฉื™ื™ื”.

ืœืื—ืจ ื‘ื ื™ื™ืช ื”ืชืžื•ื ื”, Waypoint ืชืขืœื” ืื•ืชื” ืื•ื˜ื•ืžื˜ื™ืช ืœืจื™ืฉื•ื AWS ECR ืฉืœื ื• ื›ืš ืฉื”ื™ื ืžื•ื›ื ื” ืœืžืฉืœื•ื—. ืœืื—ืจ ื”ืฉืœืžืช ื”ื‘ื ื™ื™ื”, ืฉืœื‘ ื”ืžืกื™ืจื” ืžืฉืชืžืฉ ืชื•ืกืฃ AWS ECS ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื‘ื—ืฉื‘ื•ืŸ AWS ืฉืœื ื•.

ืžื”ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœื™ - ื”ื›ืœ ืคืฉื•ื˜. ื”ื›ื ืกืชื™ ื ืงื•ื“ืช ื“ืจืš ืฉื›ื‘ืจ ืžืื•ืžืชืช ืœื—ืฉื‘ื•ืŸ ื”-AWS ืฉืœื™ ื•ื–ื” "ืคืฉื•ื˜ ืขื•ื‘ื“". ืื‘ืœ ืžื” ืงื•ืจื” ืื ืื ื™ ืจื•ืฆื” ืœืœื›ืช ืžืขื‘ืจ ืœืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœื™? ืื• ื”ืื ืื ื™ ืจื•ืฆื” ืœืคืชืข ืœื”ืคื•ืš ืืช ื”ืคืจื™ืกื” ื”ื–ื• ืœืื•ื˜ื•ืžื˜ื™ืช ื›ื—ืœืง ืžืฆื™ื ื•ืจ ื”-CI/CD ื”ื›ื•ืœืœ ืฉืœื™, ืฉื‘ื• ื ืขืจื›ื•ืช ืžื‘ื—ื ื™ ื”ืื™ื ื˜ื’ืจืฆื™ื” ื”ืฉื•ื˜ืคื™ื ืฉืœื™, ื‘ื“ื™ืงื•ืช ืื‘ื˜ื—ื” ื•ืื—ืจื•ืช? ื–ื” ื”ื—ืœืง ื‘ืกื™ืคื•ืจ ืฉื‘ื• ื ื›ื ืก GitLab CI/CD!

ื .ื‘. ืื ืืชื” ืจืง ืžืชื›ื ืŸ ืœื™ื™ืฉื CI/CD ืื• ืจื•ืฆื” ืœื”ืชื—ื™ืœ ืœื™ื™ืฉื ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืžื•ืžืœืฆื•ืช ืœื‘ื ื™ื™ืช ืฆื™ื ื•ืจื•ืช, ืฉื™ืžื• ืœื‘ ืœืงื•ืจืก ื”ื—ื“ืฉ ืฉืœ Slurm "CI/CD ื‘ืืžืฆืขื•ืช Gitlab CI ื›ื“ื•ื’ืžื”". ื–ื” ื–ืžื™ืŸ ื›ืขืช ื‘ืžื—ื™ืจ ื”ื–ืžื ื” ืžืจืืฉ.

ื ืงื•ื“ืช ืฆื™ื•ืŸ ื‘- GitLab CI/CD

ื›ื“ื™ ืœืชื–ืžืจ ืืช ื›ืœ ื–ื” ื‘- GitLab CI/CD, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ื‘ืงื•ื‘ืฅ ืฉืœื ื• .gitlab-ci.yml:

  • ืงื•ื“ื ื›ืœ, ืืชื” ืฆืจื™ืš ืชืžื•ื ืช ื‘ืกื™ืก ื›ื“ื™ ืœืจื•ืฅ ื‘ืชื•ื›ื”. Waypoint ืขื•ื‘ื“ ืขืœ ื›ืœ ื”ืคืฆืช ืœื™ื ื•ืงืก, ื”ื™ื ื–ืงื•ืงื” ืจืง ืœ-Docker, ื›ืš ืฉื ื•ื›ืœ ืœืจื•ืฅ ืขื ืชืžื•ื ืช Docker ื’ื ืจื™ืช.
  • ืœืื—ืจ ืžื›ืŸ ืขืœื™ืš ืœื”ืชืงื™ืŸ ืืช Waypoint ื‘ืชืžื•ื ื” ื–ื•. ื‘ืขืชื™ื“ ืื ื• ืขืฉื•ื™ื™ื ืœืืกื•ืฃ ื‘ื ื™ื™ืช ืžื˜ื ืชืžื•ื ื” ื•ืชื›ืœืก ืืช ื”ืชื”ืœื™ืš ื”ื–ื” ืœืขืฆืžืš.
  • ืœื‘ืกื•ืฃ ื ืจื™ืฅ ืืช ื”ืคืงื•ื“ื•ืช Waypoint

ื”ืืžื•ืจ ืœืขื™ืœ ืžืชืืจ ืืช ื›ืœ ืžื” ืฉื”ืฆื™ื ื•ืจ ืฉืœื ื• ื™ืฆื˜ืจืš ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืกืงืจื™ืคื˜ื™ื ื”ื“ืจื•ืฉื™ื ืœื”ืฉืœืžืช ื”ืคืจื™ืกื”, ืื‘ืœ ื›ื“ื™ ืœืคืจื•ืก ืœ-AWS ื ืฆื˜ืจืš ืขื•ื“ ื“ื‘ืจ ืื—ื“: ืขืœื™ื ื• ืœื”ื™ื•ืช ืžื—ื•ื‘ืจื™ื ืœื—ืฉื‘ื•ืŸ ื”-AWS ืฉืœื ื•. ื‘ืชื™ืื•ืจ ื ืงื•ื“ืช ื”ื“ืจืš ื™ืฉ ืชื•ื›ื ื™ื•ืช ืœื’ื‘ื™ ืื™ืžื•ืช ื•ื”ืจืฉืื”. HashiCorp ื’ื ื”ื•ืฆื™ืื” ื”ืฉื‘ื•ืข ืคืจื•ื™ืงื˜ ืžืจืฉื™ื ื’ื‘ื•ืœ. ืื‘ืœ ืœืขืช ืขืชื”, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœื˜ืคืœ ื‘ืื™ืžื•ืช ื•ื”ื”ืจืฉืื” ื‘ืขืฆืžื ื•.

ื™ืฉื ืŸ ืžืกืคืจ ืืคืฉืจื•ื™ื•ืช ืœืื™ืžื•ืช GitLab CICD ื‘-AWS. ื”ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื” ื”ื™ื ืœื”ืฉืชืžืฉ ื‘ืžื•ื‘ื ื” ื”ื›ืกืคืช ืฉืœ HashiCorp. ื–ื” ื ื”ื“ืจ ืื ื”ืฆื•ื•ืช ืฉืœืš ื›ื‘ืจ ืžืฉืชืžืฉ ื‘ื›ืกืคืช ืœื ื™ื”ื•ืœ ืื™ืฉื•ืจื™ื. ืืคืฉืจื•ืช ื ื•ืกืคืช ืฉืขื•ื‘ื“ืช ืื ื”ืฆื•ื•ืช ืฉืœืš ืžื ื”ืœ ื”ืจืฉืื•ืช ื‘ืืžืฆืขื•ืช AWS IAM ื”ื™ื ืœื‘ื“ื•ืง ืฉืžืฉื™ืžื•ืช ืžืกื™ืจื” ืžื•ืคืขืœื•ืช ื“ืจืš GitLab Runner, ืžื•ืจืฉื” ืœื”ืคืขื™ืœ ืืช ื”ืคืจื™ืกื” ื“ืจืš IAM. ืื‘ืœ ืื ืืชื” ืจืง ืจื•ืฆื” ืœื”ื›ื™ืจ ืืช Waypoint ื•ื‘ืจืฆื•ื ืš ืœืขืฉื•ืช ื–ืืช ื‘ืžื”ื™ืจื•ืช, ื™ืฉ ืืคืฉืจื•ืช ืื—ืจื•ื ื” - ื”ื•ืกืฃ ืืช AWS API ื•ืืช ื”ืžืคืชื—ื•ืช ื”ืกื•ื“ื™ื™ื ืฉืœืš ืžืฉืชื ื™ ืกื‘ื™ื‘ืช 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, ืœืฉืœื•ื˜ ื‘ื›ืœ ื”ืžื•ืจื›ื‘ื•ื™ื•ืช ืฉืœ ืขื‘ื•ื“ื” ืขื Gitlab CI ื•ืœื”ืชื—ื™ืœ ืœื™ื™ืฉื ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืžื•ืžืœืฆื•ืช ืขืœ ื™ื“ื™ ืœื™ืžื•ื“ ืงื•ืจืก ื•ื™ื“ืื• "CI/CD ื‘ืืžืฆืขื•ืช Gitlab CI ื›ื“ื•ื’ืžื”"... ื”ืฆื˜ืจืฃ ืืœื™ื ื•!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”