以下是(我的)操作細節的筆記:
travis-ci init
- 先將你git的repo中直接新增一個
.travis.yml
。
> 有問題可以參考這裡取得sample ➡ https://github.com/travis-ci-examples/node_js-example - travis ci用github登入後,先sync此登入帳號下的repo,將選定repo的設定打開,即可在push後發現設定已被trigger。
> travis-ci 只能用github帳號做登入。且登入帳號必須要選定的repo的管理員權限。
> 如果使用是付費版的travis-ci,請從travis-ci.com做登入;若是一般免費的,就從travis-ci.org登入。 - 上述設定完成後,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要用的就另外在說惹)
5. 將aws的key注入,可以從travis-ci的console去做設定。
> 因為初學者,因此此處先用console的方式將env注入,文章後面一點會說另外一種travis-ci建議的加密方式。
> 如下圖,從專案右邊三條線的地方settings進去,下面可以設定environment,記得下面打勾的地方不能選喔,不然會被log出來
> 千萬不要把aws key push到git上,不然很快就會發現什麼叫做花錢如流水了
我在設定完權限後,立馬push了一次,好想看自己打包了什麼
但deploy後噴 Aws::S3::Errors::SignatureDoesNotMatch
結果,後來發現好像是我key & secret key給錯 or s3bucket權限沒設好XD
> 從console設定的env設進去之後就看不到惹(所以要貼完整)
> policy設定好後,需要一段時間讓權限生效,所以設定好後,可以去泡個茶,然後多試兩次 囧
我的解法,只是rotate一組key,然後重跑,就好了 😅😅😅
另外,travis-ci console介面裡面設定的env,及yml裡面的env,都會在開始跑的初期印出來,可以從這裡看⬇
就這樣,我終於讓包好的東西放進s3惹
關於travis cli 的安裝
文件是參考這份 https://docs.travis-ci.com/user/encryption-keys/
要安裝這個原因,是因為travis-ci在對於需要加密的機敏性字眼的處理方式有兩種:
- 在travis-ci console中注入機敏性資料(聽說還是有辦法知道資料內容)
- 利用travis cli裡面的指令去加密機敏性資料(加密後再也無法解,只能rotate掉)
安裝步驟很簡單,看起來只需要 gem install travis
後就可以用惹
沒想到
ERROR: Error installing travis:
ERROR: Failed to build gem native extension.
爬了很久的文
重點就是
- 要有ruby
- 要安裝dependencies: ruby-dev / gcc
> gcc又好像是利用xcode裡面的套件,因此請將xcode更新到最新版
> ruby-dev 這部分我裝完ruby and ruby-build後他自然就好惹XD - 要記得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
我更新了Xcode 還是不行,所以就一直google找怎麼在mac裡面直接下載 ruby-dev
(根本就是找錯方向啊)
結果一氣之下,直接更新ruby ➡brew install ruby
更新完後直接搞定啊~ (但我之前到底在幹嘛😰)
所以上面無法安裝的問題根本就是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檔
以上