GitLab에서 서버리스 프레임워크로 배포 미리 보기

Serverless Framework 을(를) 사용하는 경우 이미 Serverless CI 에 미리 보기 배포 기능이 내장되어 있습니다. 자세한 내용은 A Guide to Preview Deployments with Serverless CI/CD을 참조하십시오.



Serverless CIGitHubBitbucket을 즉시 지원하며 프로젝트의 CI/CD 설정으로 이동하여 Serverless Dashboard에서 관리할 수 있습니다.

이 게시물에서는 GitLab CI/CD을 사용하여 미리 보기 배포를 구현하는 방법에 대해 읽게 됩니다. 요구 사항에 따라 설정이 변경될 수 있으므로 이 통합을 달성하는 방법에 관한 간단한 예일 뿐입니다. GitLab's CI Jobs 에 대한 기본적인 이해가 있다고 가정하겠습니다.

serverless.yml 초기 설정



사용자 지정 도메인 관리자 플러그인serverless-domain-manager을 사용하여 미리 보기 도메인과 스테이징 및 프로덕션 도메인을 구축할 것입니다.
yarn add serverless-domain-manager 또는 npm i serverless-domain-manager
# serverless.yml
org: myorg
service: my-service
app: my-service

plugins:
  - serverless-domain-manager

provider:
  name: aws
  stage: ${opt:stage, 'local'}
  region: ${opt:region, 'eu-central-1'}
  endpointType: REGIONAL
  environment:
    STAGE: ${sls:stage, 'local'}


사용자 지정 도메인 설정 추가



도메인 이름 유형에 대한 네 가지 대상이 있습니다. production , staging , previewlocal . 각 미리 보기 배포는 다른 단계이며 서버리스 대시보드에서 다음과 같이 표시됩니다.



도메인은 단계와 관련하여 다음 형식으로 생성됩니다.

도메인 대상: production .
무대: production .
도메인: production-api.myapp.org .

도메인 대상: staging .
스테이지staging .
도메인: staging-api.myapp.org
도메인 대상: preview .
스테이지preview-1 .
도메인preview-1-api.myapp.org .
(1GitLab's predefined variables에서 오는 병합 요청 ID입니다.)

덧셈:

custom:
  domains:
    production: production-api.myapp.org
    staging: staging-api.myapp.org
    preview: "preview-${env:CI_MERGE_REQUEST_IID, ''}-api.myapp.org"
    local: localhost
  customDomain:
    domainName: ${self:custom.domains.${env:DOMAIN_TARGET_TYPE, 'local'}}
    basePath: ""
    stage: ${sls:stage, 'local'}
    createRoute53Record: true


다중 리전을 사용하려는 경우 다음 옵션을 사용하여 확장customDomain할 수 있습니다.

  customDomain:
    # ...
    endpointType: "regional"
    certificateRegion: ${opt:region, 'eu-central-1'}
    route53Params:
    routingPolicy: latency


.gitlab-ci 설정



이제 serverless.yml가 준비되었으므로(기능 등과 같은 요구 사항에 대한 나머지 설정을 완료했다고 가정) GitLab CI/CD 파일 빌드를 시작할 수 있습니다.
.gitlab-ci 파일을 생성하고 deploy 단계를 추가합니다. 병합 요청이 생성되면 두 가지 기본 명령을 사용하여 미리 보기 배포eu_preview_deployment를 자동으로 배포합니다.
DOMAIN_TARGET_TYPE=preview serverless create_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
그리고
DOMAIN_TARGET_TYPE=preview serverless deploy --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
보시다시피 도메인 대상 유형은 환경 변수에서 검색됩니다. 첫 번째는 도메인을 만들고 두 번째는 애플리케이션을 배포합니다. 여기에서 단계에 이름을 지정할 수 있습니다. preview 로 시작할 필요는 없습니다.

병합 요청이 닫히거나 병합된 후 stop_eu_preview_deployment에서 eu_preview_deployment가 참조하는 작업environment.on_stop: stop_eu_preview_deployment을 호출합니다. 두 작업 모두 동일한 환경에 있어야 합니다.
stopping 작업은 두 개의 명령을 호출합니다.
DOMAIN_TARGET_TYPE=preview serverless delete_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
그리고
DOMAIN_TARGET_TYPE=preview serverless remove --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
첫 번째는 사용자 지정 도메인을 제거하고 두 번째는 미리 보기 배포를 제거합니다.

image: node:14-alpine

.install_serverless: &install-serverless
  before_script:
    - yarn global add serverless --prefix /usr/local

stages:
  - deploy

eu_preview_deployment:
  <<: *install-serverless
  stage: deploy
  script:
    - DOMAIN_TARGET_TYPE=preview serverless create_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
    - DOMAIN_TARGET_TYPE=preview serverless deploy --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
  environment:
    on_stop: stop_eu_preview_deployment
    name: development
    url: https://preview-${CI_MERGE_REQUEST_IID}-api.myapp.org
  only:
    - merge_requests

stop_eu_preview_deployment:
  <<: *install-serverless
  stage: deploy
  variables:
    GIT_STRATEGY: none
  when: manual
  script:
    - DOMAIN_TARGET_TYPE=preview serverless delete_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
    - DOMAIN_TARGET_TYPE=preview serverless remove --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1
  environment:
    name: development
    action: stop
  only:
    - merge_requests


그게 다입니다... 이제 preview 배포 설정이 있습니다.

예를 들어 stagingproduction 배포 설정을 .gitlab-ci.yml에 추가합니다.

deploy_to_staging_eu:
  <<: *install-serverless
  only:
    - staging
  stage: deploy
  script:
    - DOMAIN_TARGET_TYPE=staging serverless create_domain --stage staging --region us-east-1
    - DOMAIN_TARGET_TYPE=staging serverless deploy --stage staging --region us-east-1
  environment:
    name: development
    url: https://staging-api.myapp.org
  only:
    - branches
    - merge_requests

deploy_to_production_eu:
  <<: *install-serverless
  only:
    - master
  stage: deploy
  script:
    - DOMAIN_TARGET_TYPE=production serverless create_domain --stage production --region eu-central-1
    - DOMAIN_TARGET_TYPE=production serverless deploy --stage production --region eu-central-1
  environment:
    name: production
    url: https://production-api.myapp.org


필요에 따라 설정 규칙을 변경할 수 있습니다. .gitlab-ci.yml 키워드 참조here에 대해 자세히 알아볼 수 있습니다. 원하는대로 단계와 모든 것을 변경할 수도 있습니다.

이 작은 자습서가 GitLab의 미리 보기 배포에 대한 아이디어를 제공하기를 바랍니다. 더 나은 접근 방식이 있으면 알려주세요. :)

좋은 웹페이지 즐겨찾기