Auth0의 CI/CD 파이프라인을 CircleCI를 사용하여 만든다

14502 단어 CircleCIAuth0

개요



Auth0의 설정이나 Rules나 CustomeDatabase 주위의 소스 코드는 일원적으로 Git등으로 관리를 실시해, CircleCI등으로 CI를 통한 후에 자동으로 배포하고 싶은 경우가 많다고 생각합니다. 특히 실안건의 프로덕션 환경 등에서는. 이 기사에서는 그 방법을 tips로 씁니다.

또, 이번 내용은 이하의 GitHub 리포지토리로 공개하고 있으므로, 보다 상세를 알고 싶으면 확인해 보세요
htps : // 기주 b. 코 m / anfu s pu b ぃ 카치 온 s / 아 th0에서 p p y

Auth0 Deploy CLI



Auth0에는 Auth0 Deploy CLI이라는 CLI에서 소스 코드와 설정을 배포하는 도구가 있습니다. 이것을 사용하는 것으로 CI/CD 파이프라인을 만들어 가는 것입니다.

설치



npm으로 자신의 PC 환경에 설치합니다.
$ npm i -g auth0-deploy-cli

기존 테넌트 설정을 인코딩



Auth0 Deploy CLI가 유용한 것은 기존 테넌트의 설정을 뽑아서 yaml의 설정이나 로컬의 소스 코드 트리에 전개해 주는 것입니다.

우선 설정을 꺼내고 싶은 테넌트측에 Auth0 Deploy CLI Extension 를 인스톨 합니다. 이제 자동으로 배포 용 응용 프로그램을 만듭니다.

그런 다음 로컬로 돌아가서 다음과 같은 config.json 파일을 만들고 client_id와 client_secret은 Auth0 Deploy CLI Extension에서 만든 응용 프로그램의 값을 각각 넣습니다.

config.json
{
  "AUTH0_DOMAIN": "<YOUR_TENANT>.auth0.com",
  "AUTH0_CLIENT_ID": "<client_id>",
  "AUTH0_CLIENT_SECRET": "<client_secret>",
  "AUTH0_KEYWORD_REPLACE_MAPPINGS": {
    "AUTH0_TENANT_NAME": "<NAME>",
    "ENV": "DEV"
 },
  "AUTH0_ALLOW_DELETE": false,
  "AUTH0_EXCLUDED_RULES": [
    "rule-1-name",
    "rule-2-name"
 ]
}

그리고 다음 명령을 실행합시다.
$ a0deploy export -c config.json  -f yaml -o ./

그러면 설정 내용이 모두 로컬로 전개되어 있을 것입니다.

tenant.yml에 환경 변수 추가



내보내기 및 자동 생성된 tenant.yml 파일은 다음과 같은 임차인 설정을 설명합니다. 단, 이 파일을 내보낸 만큼의 상태라면 도메인 등의 환경에 따라 바꾸고 싶은 변수가 하드 코딩되어 있습니다.

tenant.yaml
tenant:
  enabled_locales:
    - ja
  flags:
    universal_login: true
    new_universal_login_experience_enabled: true
    disable_clickjack_protection_headers: false
  universal_login:
    colors:
      primary: '#000000'
      page_background: '#e1e1e1'
clients:
  - name: mysite
    allowed_clients: []
    allowed_logout_urls:
      - 'http://localhost:8080/auth0/'
    allowed_origins:
      - 'http://localhost:8080'
    app_type: regular_web
    callbacks:
      - 'http://localhost:8080/auth0/'
    client_aliases: []
    cross_origin_auth: false
    custom_login_page_on: true

Auth0 Deploy CLI는 yml 파일에서 @@key@@ 또는 ##key##와 같은 식별자를 제공하여 환경 변수의 값을 읽을 수 있습니다. 다음과 같은 예입니다. 이제 배포시 SITE_URL라는 환경 변수의 값을 읽고 배포합니다.
allowed_logout_urls:
      - 'http://##SITE_URL##/auth0/'

CI/CD 파이프라인 구축



테스트 작성



내보내면 tenant.yml 이외에도 rules 또는 databases 디렉토리 아래에 Rules 및 CustomeDatabase 기능에 사용되는 소스 코드가 다운로드됩니다.

이것들을 바탕으로 유닛 테스트를 작성해 봅시다. 여기는 간단한 JS 단위 테스트 테스트이므로 자세한 내용은 생략합니다.

배포 전략 결정



이번에는 GitHub의 Tag에서의 릴리스 기능을 사용. Tag를 만들어 push하는 것으로 테스트가 달리고, 모두 패스하면 프로덕션의 테넌트에 배포가 달린다고 하는 설정을 해 봅시다

배포 스크립트 작성



배포 스크립트는 다음과 같은 Node.js 스크립트를 작성합니다.

deploy.js
const auth0 = require('auth0-deploy-cli')

const config = {
  AUTH0_DOMAIN: process.env.AUTH0_DOMAIN,
  AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET,
  AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID,
  AUTH0_ALLOW_DELETE: true
}

auth0
  .deploy({
    input_file: 'tenant.yaml',
    config,
    env: process.env
  })
  .then(() => console.log('yey deploy was successful')) // eslint-disable-line no-console
  .catch((err) => console.log(`Oh no, something went wrong. Error: ${err}`)) // eslint-disable-line no-console


그런 다음 package.json에서 다음 설정을 사용하여 npm run deploy에서 배포할 수 있습니다.

package.json
"scripts": {
  "deploy": "node scripts/deploy.js"
},

CircleCI 설정 파일 작성



다음과 같이 하면 Tag가 만들어진 시점에서 테스트와 배포가 실행됩니다. Auth0의 webtask 환경이 Node8이므로 이에 맞추어 8계의 컨테이너를 읽고 있습니다. 위의 배포 스크립트 내에서 호출하는 환경 변수는 배포 대상의 프로덕션 테넌트 설정을 CirclCI에 환경 변수로 추가합시다.

.circleci/config.yaml
version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8.11

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          - v1-dependencies-

      - run: npm install

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

      - run:
          name: Formatting coding standard by prettier
          command: npm run fmt

      - run:
          name: Check coding standard by ESLint
          command: npm run lint

      - run:
          name: Run test
          command: npm run test
  deploy-prod:
    docker:
      - image: circleci/node:8.11

    working_directory: ~/repo
    steps:
      - checkout
      - run: npm install
      - run: npm run deploy

workflows:
  version: 2
  build-deploy:
    jobs:
      - build:
          filters:
            tags:
              only: /.*/
      - deploy-prod:
          requires:
            - build
          filters:
            tags:
              only: /.*/
            branches:
              ignore: /.*/


배포 구현



아래에서 태그를 만듭니다.
$ git tag 1.0.0
$ git push origin 1.0.0

CircleCI 대시보드를 보면 성공적으로 배포가 완료되었습니다!

좋은 웹페이지 즐겨찾기