Deploy Cloud Functions from GitHub via Travis CI

Cloud Functions的自動化部屬

JeffChang
5 min readMar 22, 2019

看完了這一篇文章「Deploy to Firebase Hosting from GitHub」,這一篇教的是如何透過 Travis CI 完成自動化部署網站到 Firebase Hosting,爬了文好像很少文章在教 Cloud Functions 的自動部署,於是與同事研究一下設定方式,也順利試出來了。

自動化流程

Local → GitHub → Travis CI → Cloud Functions

設定

這裡假定我們已經有以下事前準備:

  1. GitHub 已建立好專案 Repository
  2. Firebase 已有專案

本機 Firebase 專案

首先,先輸入以下指令,取得token。

firebase login:ci

複製畫面中的 token,這是要給 Travis CI 使用。

接下來,在 Cloud Functions 的資料夾中,建立 .travis.yml 設定檔,輸入以Travis CI Job LifeCycle 指令設定。

文中我們會使用到兩個變數,一個是「$PROJECT_ID」,另一個是「$FIREBASE_TOKEN」。

PROJECT_ID 假如說不想要公開專案的ID的話,可以與 FIREBASE_TOKEN 一樣,在 Travis CI 端設定。

Travis CI 設定

到 Travis CI 網站後,使用 GitHub 帳號登入,登入成功之後就會自動同步你的公開 Repo,點選「+」新增我們上面要設定的 Cloud Functions 專案。

假如說想要使用私有的專案的話,Travis 有另外的 pro 方案付費使用。

接下來我們要設定剛剛提到的兩個變數「PROJECT_ID」與「FIREBASE_TOKEN」,在畫面中有一個區塊是「Environment Variables」,依照 Key Value的格式填入即可。

到目前為止我們就已經告一個段落,不過結束了嗎?還沒!

Travis CI Job LifeCycle 指令設定

這裡可能要參照一下官方說明文件邊看。

laguage: node_js

由於 Cloud Functions 目前只支援「Node 8」、「Python 3.7」與「Go」,而這個專案是使用Node v8.9.4的版本去寫的,故在 laguage 設定這裡要填寫 node_js。

node_js:  
- "8"

Cloud Functions 執行版本是8,故 node_js 填寫8,若是6版本的話就填6。

branches:  
only:
- master

這裡多設定 branches 是因為我只希望 master 有commit時才觸發做執行,當然還有其他設定,就要看官方文件了。

before_install:  
- cd functions

在安裝指令前,Cloud Functions的資料夾結構會多一層,故要先往下移動到functions的資料夾內。

install:  
- npm install -g firebase-tools
- npm install -g typescript
- npm install
- echo "npm install done !!"

在安裝指令下,這裡寫了三個部分,

第一個是安裝 firebase-tools 工具,這樣才能使用 firebase 指令。

第二個是 typescript,因為這個專案是 TypeScript為基礎,需要經過 tsc 轉譯成 js 才能進行部署。

第三個是安裝 package.json 中所有有使用到的套件。

script:  
- npm run build
- echo "build done !!"
- firebase deploy --only functions --project $PROJECT_ID --token $FIREBASE_TOKEN
- echo "Project Deployed!"

最後這個部分則是要透過 Travis CI 幫我們部署至 GCP Cloud Functions,有嘗試了官方文件中 Google Firebase 篇的設定,但一直無法順利推上,爬文查了一下後大部分的文章都是教使用如何推至 Hosting 的設定,只好先退而求其次,土法煉鋼使用原本的部署指令,這裡需要上面的兩個變數「PROJECT_ID」、「FIREBASE_TOKEN」,並在變數前上錢字號「$」。

到這裡我們就完成了自動部署的動作了,只要 master 分支有Commit 到 GitHub,那 Travis CI 就會自動幫我們編譯並部署了。

不過呢,好像少了點什麼?

這整個流程其實還需要再加上「單元測試」,才算是完成整個的自動化部屬。

這個部分等以後寫 sky-blog 自架部落格後再來補寫流程吧。

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

JeffChang
JeffChang

Written by JeffChang

Java Backend Engineer In DDIM.

No responses yet

Write a response