Week 11 (2020/5/14)

測試, CI/CD 後半

自動化測試

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • 越上層涵蓋越多,成本越高
  • 要注意金字塔比例 (金字塔是自然產生的)
    • 變成沙漏型,代表基礎測試不夠
    • 如果上面的測試有 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

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 相關內容