新手上路之travis-ci初體驗

sasa :)
7 min readJan 18, 2019

--

這次的任務是要將我們之前所做的假的ci/cd換成真的

因此想要做的第一帕是將推上github的code利用travis-ci這個第三方,推上aws s3的bucket中

以下是非常粗淺的概述,若稍有經驗的可以先離開了XD

(若有錯誤請指正)

以下是(我的)操作細節的筆記:

travis-ci init

  1. 先將你git的repo中直接新增一個 .travis.yml
    > 有問題可以參考這裡取得sample ➡ https://github.com/travis-ci-examples/node_js-example
  2. travis ci用github登入後,先sync此登入帳號下的repo,將選定repo的設定打開,即可在push後發現設定已被trigger。
    > travis-ci 只能用github帳號做登入。且登入帳號必須要選定的repo的管理員權限。
    > 如果使用是付費版的travis-ci,請從travis-ci.com做登入;若是一般免費的,就從travis-ci.org登入。
  3. 上述設定完成後,push一次,success,表示設定是成功的。所以只需要push,travis-ci就會收到通知,直接開始打包囉。可以在travis-ci的console介面裡面看到下的所有指令。debug很好用。
但其實,做到這裡只做到『打包』這個動作,並沒有後續。
因此接下來要介紹設定aws的部分,讓這個被打包的東西放到s3上面去。

設定aws user

4. 新增一個aws user給travis-ci專門使用。
> 由於是讓travis-ci使用的,因此勢必得gen出acccess key and secret key,因此在建立權限時,請鎖到最小,以確保安全性。
> 這裡只給兩個權限,就是讀取 ssm寫入 s3指定的bucket的權限。(之後codedeploy要用的就另外在說惹)

aws iam user setting

5. 將aws的key注入,可以從travis-ci的console去做設定。
> 因為初學者,因此此處先用console的方式將env注入,文章後面一點會說另外一種travis-ci建議的加密方式。
> 如下圖,從專案右邊三條線的地方settings進去,下面可以設定environment,記得下面打勾的地方不能選喔,不然會被log出來
> 千萬不要把aws key push到git上,不然很快就會發現什麼叫做花錢如流水了

travis-ci env setting

我在設定完權限後,立馬push了一次,好想看自己打包了什麼

但deploy後噴 Aws::S3::Errors::SignatureDoesNotMatch

Aws::S3::Errors::SignatureDoesNotMatch

結果,後來發現好像是我key & secret key給錯 or s3bucket權限沒設好XD
> 從console設定的env設進去之後就看不到惹(所以要貼完整)
> policy設定好後,需要一段時間讓權限生效,所以設定好後,可以去泡個茶,然後多試兩次 囧

我的解法,只是rotate一組key,然後重跑,就好了 😅😅😅

另外,travis-ci console介面裡面設定的env,及yml裡面的env,都會在開始跑的初期印出來,可以從這裡看⬇

travis-ci log頁面
就這樣,我終於讓包好的東西放進s3惹

關於travis cli 的安裝

文件是參考這份 https://docs.travis-ci.com/user/encryption-keys/

要安裝這個原因,是因為travis-ci在對於需要加密的機敏性字眼的處理方式有兩種:

  1. 在travis-ci console中注入機敏性資料(聽說還是有辦法知道資料內容)
  2. 利用travis cli裡面的指令去加密機敏性資料(加密後再也無法解,只能rotate掉)

安裝步驟很簡單,看起來只需要 gem install travis後就可以用惹

沒想到

ERROR: Error installing travis:
ERROR: Failed to build gem native extension.
gem install travis error

爬了很久的文

重點就是

  1. 要有ruby
  2. 要安裝dependencies: ruby-dev / gcc
    > gcc又好像是利用xcode裡面的套件,因此請將xcode更新到最新版
    > ruby-dev 這部分我裝完ruby and ruby-build後他自然就好惹XD
  3. 要記得export相關變數(這個在install ruby時也會在console裡面有提醒訊息)
export PATH=”/usr/local/opt/ruby/bin:$PATH”
export LDFLAGS=”-L/usr/local/opt/ruby/lib”
export CPPFLAGS=”-I/usr/local/opt/ruby/include”
export PKG_CONFIG_PATH=”/usr/local/opt/ruby/lib/pkgconfig```

我的環境現在是macOS mojave(10.14)

且電腦裡本來就因為安裝brew的原因,所以本來就有裝ruby

更新前的ruby版本

我更新了Xcode 還是不行,所以就一直google找怎麼在mac裡面直接下載 ruby-dev (根本就是找錯方向啊)

結果一氣之下,直接更新ruby ➡brew install ruby

更新後的ruby版本

更新完後直接搞定啊~ (但我之前到底在幹嘛😰)

trais installed YA

所以上面無法安裝的問題根本就是ruby版本太舊啊啊啊啊啊啊(

搞了一整天一定要紀念一下這件事~ 囧

參考文件如下:
https://github.com/travis-ci/travis.rb/issues/391
https://github.com/travis-ci/travis.rb/issues/558

最後 補一下忙一天後的yml檔

travis encrypt --com somevar="secretkey" --add

如果沒有加後面的 --add 他會把變數印在console裡面,如果有加,他會幫你補在global裡面做變數

加密後的變數長相

如果不是一般的變數,而是一些類似slack要設定的

travis encrypt --com "slackchannelsetting:token" --add notifications.slack.rooms 總之有下add就會自動幫你塞code進yml檔

其他項目加密後的變數

以上

--

--

sasa :)
sasa :)

Written by sasa :)

目標是做一個讓所有人都聽得懂技術語言的transfer person

No responses yet