iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
DevOps

DevOps需要的技能樹...(應該)都點得到!系列 第 27

Day 27: 使用 GitLab CI/CD 進行自動化測試

  • 分享至 

  • xImage
  •  

本章節「GitLab CI/CD」概要

Day 24: GitLab CI/CD 基本概念與工作流程
Day 25: GitLab Runners 配置與使用
Day 26: 使用 GitLab CI/CD 進行原始碼掃描及套件掃描
Day 27: 使用 GitLab CI/CD 進行自動化測試
Day 28: 如何在 GitLab CI/CD 中實現持續部署 (CD)
Day 29: GitLab CI/CD 與 Kubernetes 的集成實踐

因為免費方案之硬體需求關係,此章節會以GCP作為雲端平台來操作。

認識flask

Flask 是一個輕量級的 Python Web 框架,設計簡單且易於使用,適合構建小型到中型的 Web 應用程序和 API。Flask 提供了路由、模板渲染和請求處理等基本功能,並透過插件擴展其功能,如數據庫集成、身份驗證等。由於其靈活性和模塊化設計,開發者可以自由選擇所需的工具和庫,非常適合快速原型開發和學習使用。

認識curl(linux指令)

curl 是一個強大的命令行工具,用於在命令行或腳本中傳輸數據。它支持多種協議,如 HTTP、HTTPS、FTP 等。curl 常用來發送 HTTP 請求、下載文件、提交表單數據,甚至執行 API 調用。透過選項,可以自定義請求頭、處理重定向、進行身份驗證等。它廣泛應用於測試網路服務、檢查伺服器響應及自動化任務。

撰寫ci腳本

以flask來說
需要測試網頁伺服器是否存活
因此在ci腳本加入

test:
  stage: test
  script:
    - apt-get update && apt-get install -y curl
    - if curl -s http://localhost:5000 | grep "Hello, Flask!"; then echo "App is running"; else exit 1; fi

以curl指令測試服務存活並返回Hello, Flask!
並結合到原本有build及deploy的腳本內

stages:
  - build
  - deploy
  - test

variables:
  DOCKER_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
  DOCKER_HUB_REPO: your_dockerhub_username/your_repository_name

build:
  stage: build
  script:
    - echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_USERNAME" --password-stdin
    - docker build -t $DOCKER_IMAGE .
    - docker push $DOCKER_IMAGE

deploy:
  stage: deploy
  script:
    - docker run -d -p 5000:5000 --name my_flask_app $DOCKER_IMAGE

test:
  stage: test
  script:
    - apt-get update && apt-get install -y curl
    - if curl -s http://localhost:5000 | grep "Hello, Flask!"; then echo "App is running"; else exit 1; fi
    - docker stop my_flask_app && docker rm my_flask_app

如果已經自備有單元測試腳本
也可以在ci腳本指向

stages:
  - test

test_app:
  stage: test
  script:
    - echo "Running unit tests"
    - ./run_tests.sh

認識pipeline

GitLab Runner 是 GitLab CI/CD 中執行 Pipeline 任務的代理程式。Pipeline 是一系列自動化的工作流程,包括編譯、測試、部署等階段。當程式碼推送至 GitLab 儲存庫時,Runner 會根據 .gitlab-ci.yml 設定自動執行各階段的任務。Runner 可以配置多種執行器,如 Shell、Docker、Kubernetes,來執行不同的任務。這使得開發過程自動化、高效且一致,適用於持續集成和部署流程。

因此測試只是pipeline的一環,具體的流水線可以根據需求訂製~


上一篇
Day 26: 使用 GitLab CI/CD 進行原始碼掃描及套件掃描
下一篇
Day 28: 如何在 GitLab CI/CD 中實現持續部署 (CD)
系列文
DevOps需要的技能樹...(應該)都點得到!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言