阿川私房教材:學程式,拿 offer!

63 個專案實戰,直接上手!
無需補習,按步驟打造你的面試作品。

立即解鎖你的轉職秘笈

目錄

  1. 介紹

  2. 為什麼使用 Shell 腳本實現自動化?

  3. Shell 腳本的基本概念

  1. 設定自動化環境

  2. DevOps 用例的 Shell 腳本

  1. 進階 Shell 腳本技術

  2. DevOps Shell 腳本的最佳實踐

  3. 實踐專案

  4. 結論


一、簡介

在 DevOps 領域,自動化是管理複雜系統、簡化工作流程和加快開發週期的關鍵。 Shell 腳本是一種多功能且功能強大的工具,可讓 DevOps 工程師自動執行日常任務,減少手動工作並確保跨流程的可靠性。在本指南中,我們將透過 shell 腳本介紹 DevOps 自動化的基礎知識,探索各種用例、技術和最佳實踐。

  1. 為什麼使用 Shell 腳本實現自動化?

Shell 腳本廣泛用於自動化,因為:

  • 它們是輕量級的,並且可以在幾乎任何具有 shell 的系統上快速執行(例如 Linux 上的 Bash)。

  • 它們可以與 DevOps 中的其他自動化工具集成,例如 Jenkins、Ansible 和 Kubernetes。

  • 與較繁重的程式語言相比,Shell 腳本通常可以更快地實現簡單的自動化任務。

3.Shell腳本的基本概念

在深入研究特定用例之前,我們先回顧一下對於任何 DevOps 自動化專案都至關重要的 shell 腳本編寫基礎知識。

3.1 基本 Shell 指令

您應該熟悉的一些基本 shell 命令包括:

  • echo :將文字列印到終端。

  • cattailhead :處理文件內容。

  • grep :搜尋檔案中的模式。

  • awksed :用於文字處理。

  • curlwget :從網路取得資料。

例子:

echo "Hello, DevOps!"
cat /etc/passwd | grep "user_name"

3.2 變數和資料類型

Shell 腳本具有基本的變數支援。宣告變數如下:

NAME="DevOpsEngineer"
echo "Hello, $NAME"
  • 建立變數時沒有明確類型,但您可以使用declare來指定特定類型(例如-i表示整數)。

  • 使用export使變數可供子流程存取。

3.3 條件語句

使用ifelifelse建立條件語句。

if [ $USER == "devops" ]; then
    echo "Welcome, DevOps Engineer!"
else
    echo "Access denied."
fi
  • ==!=用於字串比較。

  • -eq-ne-gt-lt等用於整數比較。

3.4 循環

循環對於自動化重複任務至關重要。

  • for迴圈:
  for i in {1..5}; do
      echo "Number $i"
  done
  • while循環:
  count=1
  while [ $count -le 5 ]; do
      echo "Count $count"
      ((count++))
  done
  1. 設定自動化環境

確保您有合適的環境:

  • Shell :通常是 Linux 上的 Bash ( /bin/bash )。

  • 文字編輯器:使用 Vim、Nano 或任何首選編輯器來編寫腳本。

  • 權限:使用chmod +x script.sh授予腳本可執行權限。

  1. DevOps 用例的 Shell 腳本

現在,讓我們回顧一下可以使用 shell 腳本自動化的特定 DevOps 任務。

5.1 系統監控

可以自動監控 CPU、記憶體和磁碟使用等系統資源,以便在資源超過閾值時向 DevOps 團隊發出警報。

CPU 使用率監控範例腳本:

#!/bin/bash
THRESHOLD=80
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
if (( $(echo "$cpu_usage > $THRESHOLD" |bc -l) )); then
    echo "CPU usage is above $THRESHOLD%. Current usage: $cpu_usage%" | mail -s "CPU Alert" [email protected]
fi

5.2 自動化部署

Shell 腳本可以透過提取最新程式碼、建置並將其部署到伺服器來簡化部署。

部署腳本範例:

#!/bin/bash
echo "Starting deployment..."
git pull origin main
docker build -t myapp:latest .
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 80:80 myapp:latest
echo "Deployment completed."

5.3 備份與恢復

定期備份資料至關重要。 Shell 腳本可以自動執行備份任務並儲存在安全位置。

MySQL資料庫備份範例:

#!/bin/bash
DATE=$(date +%F)
DB_BACKUP_PATH='/backup/dbbackup'
DB_USER='root'
DB_PASS='password'
DB_NAME='mydb'

mkdir -p ${DB_BACKUP_PATH}/${DATE}
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${DB_BACKUP_PATH}/${DATE}/${DB_NAME}.sql
echo "Backup completed for database ${DB_NAME}."

5.4 日誌管理

日誌檔案會隨著時間的推移而變大。 Shell 腳本可以歸檔、輪換或刪除舊日誌以節省空間。

歸檔日誌範例:

#!/bin/bash
LOG_DIR="/var/log/myapp/"
ARCHIVE_DIR="/var/log/myapp/archive/"
find $LOG_DIR -name "*.log" -mtime +30 -exec mv {} $ARCHIVE_DIR \;
gzip $ARCHIVE_DIR/*.log
echo "Log files older than 30 days archived and compressed."
  1. 進階 Shell 腳本技術

進階 shell 腳本可以使腳本更加強大和適應性更強。這裡有一些技巧:

  • 函數:將腳本分解為可重複使用的函數。
  function backup() {
      echo "Performing backup..."
      # Backup logic here
  }
  backup
  • 錯誤處理:在開始時使用set -e來在錯誤時退出或使用陷阱來優雅地處理錯誤。

  • 解析參數:透過解析命令列參數來提供靈活性。

  while getopts u:p: flag
  do
      case "${flag}" in
          u) user=${OPTARG};;
          p) pass=${OPTARG};;
      esac
  done
  echo "User: $user"
  echo "Password: $pass"
  1. DevOps Shell 腳本的最佳實踐

以下最佳實踐將提高腳本的可讀性、可靠性和效能:

  • 使用註釋:為清晰起見,對您的程式碼進行註解。

  • 使用描述性變數名稱:提高可讀性。

  • 使用函數進行模組化:透過使用函數來保持程式碼的組織性。

  • 錯誤處理:透過條件或陷阱處理潛在錯誤。

  • 限制根存取:以所需的最低權限執行腳本。

  1. 實踐專案

以下是一些實作專案,可協助您練習並提升 DevOps shell 腳本編寫技能:

  1. 自動伺服器設定:編寫一個腳本,在新的 Linux 實例上設定 Web 伺服器(例如 Apache 或 Nginx)。

  2. CI/CD 管道腳本:編寫 shell 腳本來自動執行 CI/CD 管道的步驟(例如,複製、建置和部署)。

  3. 使用者存取管理:自動建立使用者、權限設定和存取日誌記錄。

  4. 自動執行狀況檢查:建立腳本來檢查關鍵服務的運作狀況,並在服務發生故障時發送警報。

  5. 結論

Shell 腳本編寫是任何 DevOps 工程師的基本技能。透過掌握 shell 腳本,您可以自動執行重複性任務、提高效率並確保流程的一致性和可靠性。無論您是管理部署、備份還是監控,shell 腳本都提供了一種快速有效的方法來自動執行關鍵的 DevOps 任務。繼續練習現實世界的專案,以增強您的腳本編寫技能,並不斷探索先進的技術,將您的 DevOps 自動化提升到一個新的水平。


👤 作者

橫幅

加入我們的Telegram 社群||在 GitHub 上關注我以獲取更多 DevOps 內容!


原文出處:https://dev.to/prodevopsguytech/devops-automation-with-shell-scripting-1p69


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:學程式,拿 offer!

63 個專案實戰,直接上手!
無需補習,按步驟打造你的面試作品。

立即解鎖你的轉職秘笈