這只是一個幼幼班等級的淺談
在學習所謂的CI/CD 的知識前,你可能應該要知道這整個流程在幹嘛。
以及你在這整個流程中扮演什麼角色。
在這邊有用到的技能。
-
docker
-
unit test 撰寫
-
web server 的知識
-
server os 的使用
-
雲端服務(GCP, Azure, AWS...)的使用
-
看文件的耐心!
- 持續整合
搭配git flow,開發人員在每一次的 Commit 後,能夠確保每次進入server的程式碼不會因為套件版本差異而產生錯誤。
可以測試這些交付上去的code,確認交付的程式碼都是通過測試的程式碼。
- 持續佈署
透過自動化方式,將寫好的程式碼更新到機器上並公開對外服務,另外需要確保套件版本&資料庫資料正確性。
流程大概如下圖:
取至網路
-
lint test
-
unit test
....
-
先熟知你要部署的流程
-
來點Docker吧
我們用GCP 當作操作範例。
- 創建一個VM 的 key 文件
$ ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
- 測試進入
$ ssh -i ~/.ssh/KEY_FILENAME USERNAME@IP
- 加密 Key
$ gpg --symmetric --cipher-algo AES256 ~/.ssh/KEY_FILENAME
- 移動至專案底下
$ mv ~/.ssh/KEY_FILENAME.gpg ./KEY_FILENAME.gpg
- 安裝 Docker 和 Docker-compose
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
- 測試一下是否安裝成功
$ sudo docker -v && sudo docker-compose -v
Build 一個image上去
$ docker build -t gcr.io/[your_gcp_project_id]/[your_image_name]:[tag_name] $PWD
推上 GCR:
$ gcloud docker -- push DOCKER_IMAGE_NAME:TAG
or
$ gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io
$ docker push cr.io/[your_gcp_project_id]/[your_image_name]:[tag_name]
-
設定Secrets 變數
-
gcloud login
$ gcloud auth print-access-token
- 設定 SA-key
$ gcloud iam service-accounts keys create helloworld-key.json \
[email protected]
- 設定解密密碼
test:
# The type of runner that the job will run on
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Install 🔧💚
run: npm install
- name: Lint 🧐
run: npm run lint
- name: Unit Test 🧐
run: npm run test
- name: Chmod Key 🚚 🚚
run: chmod 700 $HOME/secrets/key
- name: deploy in GCE
run: |
ssh -o StrictHostKeyChecking=no -i $HOME/secrets/key [email protected] "./deploy.sh"