GITLABにおける無セルフレームワークによるプレビュー展開


あなたが使っているならばServerless Framework , それは既に組み込まれてプレビュー機能を内蔵してServerless CI . あなたは読むことができますA Guide to Preview Deployments with Serverless CI/CD を参照してください.

Serverless CI サポートGitHub and Bitbucket ボックスから、あなたはそれを管理することができますServerless Dashboard プロジェクトのCI/CD設定に進みます.
このポストでは、使用してプレビュー展開を実装する方法について説明しますGitLab CI/CD . セットアップは、この統合を達成する方法に関する簡単な例であるので、要件に応じて変更することがあります.私はあなたの基本的な理解を持っていると仮定しますGitLab's CI Jobs .

無力。初期設定


カスタムドメインマネージャープラグインを使用しますserverless-domain-manager プレビュードメインだけでなく、ステージングや生産ドメインを構築する.yarn add serverless-domain-manager or 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'}

カスタムドメイン設定の追加


ドメイン名の種類には4つのターゲットがあります.production , staging , preview and local . それぞれのプレビュー展開は別の段階になります.

ドメインは、それらのステージに関するこれらの形式で作成されます.
ドメインターゲットproduction .
ステージproduction .
ドメインproduction-api.myapp.org .
ドメインターゲットstaging .
ステージstaging .
ドメインstaging-api.myapp.orgドメインターゲットpreview .
ステージpreview-1 .
ドメインpreview-1-api.myapp.org .
( 1 あなたのマージ要求IDはGitLab's predefined variables )
追加
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 setup


今私たちはserverless.yml 準備ができて(関数のようなあなたのニーズのための残りの設定を完了したと仮定して)、私たちはgitlab ci/cdファイルを構築し始めることができます.
私たちは.gitlab-ci ファイルを追加deploy ステージ.マージ要求が作成されると、自動的にプレビュー展開を展開しますeu_preview_deployment 2つのメインコマンドでDOMAIN_TARGET_TYPE=preview serverless create_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1andDOMAIN_TARGET_TYPE=preview serverless deploy --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1ドメインターゲット型は、環境変数から取得できます.最初のドメインを作成し、2番目のアプリケーションを配備します.ここでは、あなたのステージに任意の名前を与えることができます.それは起動する必要はありませんpreview .
我々のマージ要求が閉じられるか、合併されたあと、我々は我々の仕事を呼びますstop_eu_preview_deployment これはeu_preview_deployment インenvironment.on_stop: stop_eu_preview_deployment . 両方のジョブは同じ環境でなければなりません.
The stopping ジョブは2つのコマンドを呼び出します.DOMAIN_TARGET_TYPE=preview serverless delete_domain --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1andDOMAIN_TARGET_TYPE=preview serverless remove --stage preview-${CI_MERGE_REQUEST_IID} --region eu-central-1最初のカスタムドメインを削除し、2つ目のプレビュー展開を削除します.
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 展開設定.
例として、staging and production のための配備セットアップ.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のプレビュー展開についてのアイデアを提供します.より良い方法があるなら、知らせてください