2020年7月7日 星期二

[AWS] AWS CI/CD 動手做 - Travis CI - 1

最近在公司接觸了CI/CD的服務部屬,但是因為是直接接手別人建好的服務
想說趁機趁還有印象時快點把SOP寫起來,這樣也是加深自己的印象
也可以提供一些如果想把地端服務做CI/CD的MIS可以做參考
這邊會是以在地端有Linux Service要做CI/CD著手

何謂 CICD ,其實講的比較簡單一點就是將上程式的流程自動化,自動 build code、執行 unit test、自動更新線上服務...所有反覆步驟都轉為自動化執行

CI(Continuous integration),即是「持續整合」

CD(Continuous Deployment),即是「持續佈署」


本篇會使用的版控工具為 GitHub
使用 Travis CI 作為版控的串接服務,因為Travis CI 只能跟GitHub做串接
Trvais CI的解釋 可參考Miles大神的介紹,述小弟不在贅述
儲存相關設定的會在 aws S3 Bucket
這邊地端服務會以常見的Squid Proxy Service 作為Demo
使用的Liunx版本為Ubuntu 18.04 TLS


1.  首先在 GitHub 上面開啟一個 Private Project
(補充:
如果不會使用GitHub可參考這篇)


2.  Download Project 到本機桌面


3.  使用Git 的相關指令來確認是否跟GitHub Project有互通

  •  git add .
  •  git commit -m "xxx"
  •  git push
  •  git pull 


4. 新建一個 AWS S3 bucket,盡量可以跟 Github Project的名字一樣

(補充:為什麼需要使用S3呢,因為S3是用來儲存你所需要部屬的程式或是設定檔,讓Travis CI打包檔案丟上來用的空間)


5. 建立一個 IAM User  Travis CI,盡量可以跟 Github Project 的名字一樣,比較好辨識

(補充:為什麼要給Travis CI一個權限呢,因為Travis CI需要去觸發Codedeploy去接續後續的的部屬流程以及需要把打包好的東西丟至S3 Bucket上,所以需要開權限)


6. IAM User 權限 給他 “AmazonS3FullAccess” 就好


7. 新增 .travis.yaml 到 GitHub Project 上面


"後面會再繼續寫步驟,這只是一開始而已,沒這麼簡單"


#####以下是 .travis.yaml的範例#####


language: python

python:

- '2.7'

services:

- docker

before_install:

- chmod +x tests/*.sh

install:

- docker build -t "GitHub Project Name"/squid .

- docker run -di --name squid "GitHub Project Name"/squid

script:

- docker exec -it squid /tests/test_config.sh

- docker exec -it squid /tests/test_service.sh

notifications:

  email:

    recipients:

    - your-email

    on_success: change

    on_failure: always

  slack:

   

before_deploy:

- zip -r latest-${TRAVIS_BUILD_NUMBER}.zip *

- mkdir -p "GitHub Project Name"

- mv latest-${TRAVIS_BUILD_NUMBER}.zip "GitHub Project Name"/latest-${TRAVIS_BUILD_NUMBER}.zip

deploy:

- provider: s3

  access_key_id: "KEY"

  secret_access_key: "KEY"

  bucket: "GitHub Project Name-bucket"

  skip_cleanup: true

  local_dir: "GitHub Project Name"

  region: your aws region

  on:

    branch: master