--- tags: 1082, lsa --- - Book mode https://hackmd.io/@ncnu-opensource/book # Week 11 (2020/5/14) - Book mode https://hackmd.io/@ncnu-opensource/By4H6JLNW ## 測試, CI/CD 後半 ### 自動化測試 ![](https://imsardine.github.io/images/testing-pyramid.png) - 越上層涵蓋越多,成本越高 - 要注意金字塔比例 (金字塔是自然產生的) - 變成沙漏型,代表基礎測試不夠 - 如果上面的測試有 fail 可能抓不到是哪個 module 錯誤等等 - 單元測試 (Unit Test) - independent: 相依性太高 就會不知道出錯的部份 - 整合測試 (Intergration Test) - 通過了單元測試,代表每個元件都是正常的,但可能相互運作是不合理的 - 端對端測試 (End to End, E2E) - 其他測試: - 用戶接受度測試 UAT:是測試的一個階段, UAT 測試之前僅確認有沒有依照規格開發,使用 UAT 是確認規格是否適用執行 - 回歸測試:要確定舊版本正常運行才可以加上新版本(新版本不能影響舊版本) ### Git - 安裝 Git - `sudo apt install git` - 建立專案資料夾 - `mkdir <專案名稱>` - 把專案資料夾建立成 git 的 repo - 切進專案資料夾 - `cd <專案名稱>` - `git init` - 會產生一個 .git 的目錄 - 檢查本機端的 repo 狀態和遠端的狀態差別 - `git status` - 更新遠端的變動(讓本機能看到) - `git fetch` - 將專案中做過的更改準備 commit - `git add <檔案名>` - `git add .` (把所有更改都加進去) - add 前應先用 `git status` 看哪些被更改後,再 add 特定檔案 - 將已經加入的更改 commit 到 repo 中 - `git commit -m "<留言 你做了什麼更改之類>"` - 盡量不要使用 `commit -a` - 將 commit 推送到 repo 中 - `git push` - 更新本機端的狀態(from master branch) - `git pull` - git 會把 reference 存在 refs 裡 ## 網路安全規劃 - 效能 - 追查網路封包到很細的時候,是追出 one way,而不是 Round-Trip Time ## 學長分享 - docker ### 環境要求 - curl with docker daemon - 開啟 cgroup 和 swaps - cgroup 預設不會開啟 ### 指令查看相關資訊 - `sudo lsb_release -a` 看 ubuntu 版本 - network plungin - `sudo systemctl status docker` 看 docker 運行的狀況 - 有常駐的監聽 socket - `| jq .` 輸出 command line 較好看 - `ps auxf` 可看到 process 的 parent/child 關係 - `/proc` 所有 PID 掛載的位置 - `sudo docker run <image>` - `--rm` exit 或 stop 就不會在 `docker ps -a` 中看到 - `-m <memory_set>` 限制 memory(hard limit) - 超過會觸發 OOM :::info limit (memory) 可用 `stress-ng` 強迫壓測 再去 `/var/log/syslog` 去查看事件 - 被 cgroup 監控,並被 kill 掉 ::: - `docker inspect <container_name>` 偵查 Container 的細部資訊 ### docker - cgroup - kernel 2.2 - capabilities - logPath (`docker inspect <Container_name>` 查看) - STDOUT ( CMD 根據 command ouput 出的內容) 跟 STDIN ( CMD 下的指令 ) - log driver - type : j-son file - Container 可能有不同的 plugin 用不同 type 的 type - storage - 支援不同的 protocol -> 不同 storage 的 driver - pull 時跑很 layer 是什麼意思 - 可從 `/var/lib/docker/overlay2` 下指定的 Container ID 看到 (未必是 overlay2) - `docker history <docker_name>` 安裝的歷史訊息,可以看到 image 有哪幾層 - 將不同的 layer 疊加起來 會用 soft link 的方式存放在一個目錄底下 - namspace - 縮寫 `netns` - `ip netns list` 是看不到任何訊息的 - 需要再做 soft link ### 問題 - docker stop 為什麼可以停止一個 Container? - 送個 SIGTERM 告訴 container 你該關掉囉 大概 10 秒(grace time)後 parent process 就會再送 SIGKILL 強制關閉 - exit code - bash trap signal - docker 上的 PID 怎跟 host 上的 PID mapping 的 - `/proc` (? - 會有個目錄結構 裡面有 PID 相關內容