CircleCI에서 firebase function(Node.js)의 CI/CD하기
개요
Github과 CircleCI의 연계는 계정 연계만 할 수 있으므로 적당히 권합니다.
이 기사에서는 git 디렉토리 구성과 CircleCI 설정 파일 (작업을 설명)에 대해 설명합니다.
git 디렉토리 구성
firebase init
를 실행 한 계층 구조를 git 관리의 루트 디렉토리로 설정합니다.
.
├── .circleci
├── firebase.json
├── functions
│ ├── index.js
│ ├── node_modules
│ ├── package.json ← この階層と
│ └── test
├── node_modules
└── package.json ← この階層を行き来する
원래 functions 디렉토리를 git 관리의 루트 디렉토리로 만들었지만 firebase CLI의 편의상이 계층 구조를 관리하고 있습니다. (후술)
.circleci/config.yml
circleci에서 수행하는 태스크는 이 파일에 작성되므로 디렉토리/파일을 작성합니다.
주로 배포 작업과 테스트 작업을 설명합니다.
version: 2
jobs:
function-deploy:
docker:
- image: circleci/node:latest
steps:
- checkout
# functions配下のnpm設定
# 基本的にfunctions配下で作業するため、working_directoryでfunctionsを指定している
# キャッシュ関連処理ではworking_directoryが利用できない
- run: sudo npm install -g npm@latest
# 毎回npm installに時間がかかると面倒なのでキャッシュから取ってくる
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
# 毎回npm installに時間がかかると面倒なのでキャッシュに保存する
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
# トップレベルのnpm設定
# npm run deployは最上位レベルから叩くため、working_directoryを移動しない
- restore_cache:
key: dependency-cache-{{ checksum "package.json" }}
- run:
command: npm install
- save_cache:
key: dependency-cache-{{ checksum "package.json" }}
paths:
- ./node_modules
- run:
command: npm run deploy
function-test:
docker:
- image: circleci/node:latest
steps:
- checkout
- run: sudo npm install -g npm@latest
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
- run:
# functions直下のpackage.jsonで設定したテストを実行する
command: npm test
working_directory: functions
workflows:
version: 2
# testというワークフローを作成
test:
jobs:
# 上の方で設定した'function-test'を実行する
- function-test:
filters:
branches:
# 対象はdevelopブランチ
only: develop
# deployというワークフローを作成
deploy:
jobs:
# 上の方で設定した'function-deploy'を実行する
- function-deploy:
filters:
branches:
# 対象はmasterブランチ
only: master
캐시계의 태스크(restore_cache와 save_cache)는 없어도 움직이기 때문에 초기 동작의 확인시는 빼도 좋다고 생각합니다.
# save_cache
의 paths에 지정하는 디렉토리 부하가 캐쉬되므로, 의도하지 않고 자신의 소스 코드를 캐쉬하지 않게 주의합시다.
# 캐시를 지우고 싶다면,key: dependency-cache-{{ checksum "package.json" }}-{{ .Environment.NPM_VERSION }}
와 같이 키를 설정하면 NPM_VERSION
의 값을 CircleCI 관리 화면에서 변경하고 흐름을 Re-run하면 캐시가 사라집니다. (Git의 소스 변경없이 캐시가없는 상태에서 작업을 실행할 수 있습니다.)
package.json
최상위 package.json에 다음을 설정합니다.
이렇게하면 npm run deploy
에서 firebase 배포 명령이 실행됩니다.
또한 firebase 배포를 위해 firebase-tools
를 설치합니다.
"scripts": {
"deploy": "firebase deploy --only functions --token $FIREBASE_TOKEN --project $PROJECT_NAME",
},
"devDependencies": {
"firebase-tools": "^7.0.2"
}
그건 그렇고,이 배포 명령은 명령을 실행 한 계층 구조 바로 아래에 functions
디렉터리를 대상으로 배포하는 것 같습니다.functions
디렉터리에 있는 상태에서 이 배포 명령을 실행하면 바로 아래에 functions
디렉터리가 없으므로 실패합니다.
환경 변수 설정
package.json에 기재된 $FIREBASE_TOKEN
, $PROJECT_NAME
는 CircleCI의 관리 화면에서 설정합니다.
또한 $FIREBASE_TOKEN
는 firebase login:ci
명령 실행으로 얻을 수 있습니다.
CircleCI의 환경 변수 설정은 jobs->기어 마크의 클릭으로 거기에서 설정해 주세요.
사이고에게
그리고 github에서 develop 브랜치나 master 브랜치가 움직이면 태스크가 실행됩니다.
(멸차 고차 실패했다)
Reference
이 문제에 관하여(CircleCI에서 firebase function(Node.js)의 CI/CD하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/D-kun/items/f5c3e795bbff496f0a9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
firebase init
를 실행 한 계층 구조를 git 관리의 루트 디렉토리로 설정합니다..
├── .circleci
├── firebase.json
├── functions
│ ├── index.js
│ ├── node_modules
│ ├── package.json ← この階層と
│ └── test
├── node_modules
└── package.json ← この階層を行き来する
원래 functions 디렉토리를 git 관리의 루트 디렉토리로 만들었지만 firebase CLI의 편의상이 계층 구조를 관리하고 있습니다. (후술)
.circleci/config.yml
circleci에서 수행하는 태스크는 이 파일에 작성되므로 디렉토리/파일을 작성합니다.
주로 배포 작업과 테스트 작업을 설명합니다.
version: 2
jobs:
function-deploy:
docker:
- image: circleci/node:latest
steps:
- checkout
# functions配下のnpm設定
# 基本的にfunctions配下で作業するため、working_directoryでfunctionsを指定している
# キャッシュ関連処理ではworking_directoryが利用できない
- run: sudo npm install -g npm@latest
# 毎回npm installに時間がかかると面倒なのでキャッシュから取ってくる
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
# 毎回npm installに時間がかかると面倒なのでキャッシュに保存する
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
# トップレベルのnpm設定
# npm run deployは最上位レベルから叩くため、working_directoryを移動しない
- restore_cache:
key: dependency-cache-{{ checksum "package.json" }}
- run:
command: npm install
- save_cache:
key: dependency-cache-{{ checksum "package.json" }}
paths:
- ./node_modules
- run:
command: npm run deploy
function-test:
docker:
- image: circleci/node:latest
steps:
- checkout
- run: sudo npm install -g npm@latest
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
- run:
# functions直下のpackage.jsonで設定したテストを実行する
command: npm test
working_directory: functions
workflows:
version: 2
# testというワークフローを作成
test:
jobs:
# 上の方で設定した'function-test'を実行する
- function-test:
filters:
branches:
# 対象はdevelopブランチ
only: develop
# deployというワークフローを作成
deploy:
jobs:
# 上の方で設定した'function-deploy'を実行する
- function-deploy:
filters:
branches:
# 対象はmasterブランチ
only: master
캐시계의 태스크(restore_cache와 save_cache)는 없어도 움직이기 때문에 초기 동작의 확인시는 빼도 좋다고 생각합니다.
# save_cache
의 paths에 지정하는 디렉토리 부하가 캐쉬되므로, 의도하지 않고 자신의 소스 코드를 캐쉬하지 않게 주의합시다.
# 캐시를 지우고 싶다면,key: dependency-cache-{{ checksum "package.json" }}-{{ .Environment.NPM_VERSION }}
와 같이 키를 설정하면 NPM_VERSION
의 값을 CircleCI 관리 화면에서 변경하고 흐름을 Re-run하면 캐시가 사라집니다. (Git의 소스 변경없이 캐시가없는 상태에서 작업을 실행할 수 있습니다.)
package.json
최상위 package.json에 다음을 설정합니다.
이렇게하면 npm run deploy
에서 firebase 배포 명령이 실행됩니다.
또한 firebase 배포를 위해 firebase-tools
를 설치합니다.
"scripts": {
"deploy": "firebase deploy --only functions --token $FIREBASE_TOKEN --project $PROJECT_NAME",
},
"devDependencies": {
"firebase-tools": "^7.0.2"
}
그건 그렇고,이 배포 명령은 명령을 실행 한 계층 구조 바로 아래에 functions
디렉터리를 대상으로 배포하는 것 같습니다.functions
디렉터리에 있는 상태에서 이 배포 명령을 실행하면 바로 아래에 functions
디렉터리가 없으므로 실패합니다.
환경 변수 설정
package.json에 기재된 $FIREBASE_TOKEN
, $PROJECT_NAME
는 CircleCI의 관리 화면에서 설정합니다.
또한 $FIREBASE_TOKEN
는 firebase login:ci
명령 실행으로 얻을 수 있습니다.
CircleCI의 환경 변수 설정은 jobs->기어 마크의 클릭으로 거기에서 설정해 주세요.
사이고에게
그리고 github에서 develop 브랜치나 master 브랜치가 움직이면 태스크가 실행됩니다.
(멸차 고차 실패했다)
Reference
이 문제에 관하여(CircleCI에서 firebase function(Node.js)의 CI/CD하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/D-kun/items/f5c3e795bbff496f0a9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
version: 2
jobs:
function-deploy:
docker:
- image: circleci/node:latest
steps:
- checkout
# functions配下のnpm設定
# 基本的にfunctions配下で作業するため、working_directoryでfunctionsを指定している
# キャッシュ関連処理ではworking_directoryが利用できない
- run: sudo npm install -g npm@latest
# 毎回npm installに時間がかかると面倒なのでキャッシュから取ってくる
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
# 毎回npm installに時間がかかると面倒なのでキャッシュに保存する
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
# トップレベルのnpm設定
# npm run deployは最上位レベルから叩くため、working_directoryを移動しない
- restore_cache:
key: dependency-cache-{{ checksum "package.json" }}
- run:
command: npm install
- save_cache:
key: dependency-cache-{{ checksum "package.json" }}
paths:
- ./node_modules
- run:
command: npm run deploy
function-test:
docker:
- image: circleci/node:latest
steps:
- checkout
- run: sudo npm install -g npm@latest
- restore_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
- run:
command: npm install
working_directory: functions
- save_cache:
key: dependency-cache-{{ checksum "functions/package.json" }}
paths:
- functions/node_modules
- run:
# functions直下のpackage.jsonで設定したテストを実行する
command: npm test
working_directory: functions
workflows:
version: 2
# testというワークフローを作成
test:
jobs:
# 上の方で設定した'function-test'を実行する
- function-test:
filters:
branches:
# 対象はdevelopブランチ
only: develop
# deployというワークフローを作成
deploy:
jobs:
# 上の方で設定した'function-deploy'を実行する
- function-deploy:
filters:
branches:
# 対象はmasterブランチ
only: master
최상위 package.json에 다음을 설정합니다.
이렇게하면
npm run deploy
에서 firebase 배포 명령이 실행됩니다.또한 firebase 배포를 위해
firebase-tools
를 설치합니다. "scripts": {
"deploy": "firebase deploy --only functions --token $FIREBASE_TOKEN --project $PROJECT_NAME",
},
"devDependencies": {
"firebase-tools": "^7.0.2"
}
그건 그렇고,이 배포 명령은 명령을 실행 한 계층 구조 바로 아래에
functions
디렉터리를 대상으로 배포하는 것 같습니다.functions
디렉터리에 있는 상태에서 이 배포 명령을 실행하면 바로 아래에 functions
디렉터리가 없으므로 실패합니다.환경 변수 설정
package.json에 기재된 $FIREBASE_TOKEN
, $PROJECT_NAME
는 CircleCI의 관리 화면에서 설정합니다.
또한 $FIREBASE_TOKEN
는 firebase login:ci
명령 실행으로 얻을 수 있습니다.
CircleCI의 환경 변수 설정은 jobs->기어 마크의 클릭으로 거기에서 설정해 주세요.
사이고에게
그리고 github에서 develop 브랜치나 master 브랜치가 움직이면 태스크가 실행됩니다.
(멸차 고차 실패했다)
Reference
이 문제에 관하여(CircleCI에서 firebase function(Node.js)의 CI/CD하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/D-kun/items/f5c3e795bbff496f0a9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그리고 github에서 develop 브랜치나 master 브랜치가 움직이면 태스크가 실행됩니다.
(멸차 고차 실패했다)
Reference
이 문제에 관하여(CircleCI에서 firebase function(Node.js)의 CI/CD하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/D-kun/items/f5c3e795bbff496f0a9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)