DevOps - 管道



在本章中,我們將解釋什麼是 DevOps 管道以及為什麼它們很重要。我們還將瞭解 DevOps 管道的各個主要部分。這些部分包括原始碼管理、持續整合 (CI)、持續交付 (CD)、部署策略以及來自監控的反饋。我們將幫助您設定您的 DevOps 管道。

什麼是 DevOps 管道?

DevOps 管道是自動執行的過程。它們幫助我們持續整合和持續交付 (CI/CD) 軟體應用程式。這些管道有一系列步驟,程式碼更改將經歷這些步驟。這從最初的開發開始,一直到生產環境中的部署。

DevOps 管道的主要目標是使軟體開發生命週期更加順暢。這有助於我們更快、更可靠地交付高質量的軟體。

DevOps 管道的主要元件

DevOps 管道有幾個關鍵部分協同工作。它們幫助我們使軟體開發和部署過程更加容易。每個部分對於使管道正常且快速執行都很重要。

原始碼管理

原始碼管理 (SCM) 系統幫助我們跟蹤和管理對程式碼的更改。它們確保我們擁有版本控制並允許開發人員之間進行協作。

工具如 Git、Subversion、Mercurial 用於原始碼管理。關鍵功能包括版本控制、分支和合並策略、協作和程式碼審查

持續整合 (CI)

持續整合自動化了我們將程式碼更改新增到共享位置的方式。它幫助我們確保新程式碼順利合併並在我們進入下一步之前進行測試。

持續交付 (CD)

持續交付以 CI 為基礎,透過自動化我們將應用程式交付到測試和生產環境的方式。它確保程式碼始終準備就緒以進行部署。

部署

部署是指我們將應用程式移動到生產環境。這是終端使用者可以使用它的地方。良好的部署策略有助於我們減少停機時間並保持可靠性。

監控和反饋

監控工具幫助我們密切關注應用程式效能、使用者操作和系統健康狀況。反饋對於儘早發現問題並保持軟體質量至關重要。

監控和反饋的關鍵方面包括即時效能監控(如延遲和錯誤率)、日誌記錄和警報系統以儘早捕獲問題,以及使用者反饋渠道以收集未來改進的想法。

如何設定 DevOps 管道?

設定 DevOps 管道包含幾個步驟。這些步驟幫助我們自動化軟體開發生命週期。下面是使用程式碼示例建立 DevOps 管道的指南。

步驟 1:設定您的 DevOps 環境

首先,我們需要選擇我們的工具和技術。原始碼管理的一些流行選擇是 Git。對於持續整合和交付,我們可以使用 Jenkins 或 Travis CI。對於容器化,我們通常使用 Docker,對於編排,我們選擇 Kubernetes。

選擇工具後,我們需要在本地機器或伺服器上安裝軟體。要安裝 Docker,我們執行 -

sudo apt-get install docker-ce docker-ce-cli containerd.io

要在 Ubuntu 上安裝 Jenkins,我們可以使用以下命令 -

sudo apt-get update
sudo apt-get install openjdk-11-jre
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins

步驟 2:建立原始碼儲存庫

接下來,我們建立原始碼儲存庫。我們首先為我們的專案建立一個 Git 儲存庫。我們可以透過建立一個新目錄並執行 git init 來做到這一點。方法如下 -

mkdir my-app
cd my-app
git init

使用良好的分支策略也很重要。我們可以使用諸如 git checkout -b feature/my-new-feature 之類的命令為功能、錯誤修復和釋出建立分支。

步驟 3:實施持續整合

設定原始碼管理後,我們實施持續整合 (CI)。我們首先配置 Jenkins 等 CI 工具。我們為我們的專案建立一個新的 Jenkins 作業並將其連線到我們的 Git 儲存庫。

接下來,我們編寫構建指令碼來自動化構建過程。我們可能會建立一個名為 build.sh 的指令碼,其中包含構建應用程式的命令。這是一個簡單的示例 -

#!/bin/bash
echo "Building the project..."
# Add commands to build your application

我們還需要將自動化測試新增到我們的 CI 流程中,以便在每次程式碼提交時執行單元測試和整合測試。Jenkins 管道配置可能如下所示 -

pipeline {
   agent any
   stages {
      stage('Build') {
         steps {
            sh './build.sh'
         }
      }
      stage('Test') {
         steps {
            sh './run_tests.sh'
         }
      }
   }
}

步驟 4:實施持續交付

持續整合之後,我們實施持續交付 (CD)。我們在 Jenkins 或其他 CI/CD 工具中設定部署管道來自動化部署。例如,我們可以這樣設定 Jenkins 管道 -

pipeline {
   agent any
   stages {
      stage('Deploy to Staging') {
         steps {
            sh './deploy_to_staging.sh'
         }
      }
      stage('Deploy to Production') {
         steps {
            input 'Approve Production Deployment?'
            sh './deploy_to_production.sh'
         }
      }
   }
}

我們還應該很好地管理環境配置。我們可以使用配置檔案來處理不同的環境,例如開發、登臺和生產。

步驟 5:容器化和編排

容器化是 DevOps 管道中的一個關鍵步驟。我們可以使用 Docker 建立一個 Dockerfile,其中定義了應用程式的環境。這是一個 Dockerfile 的簡單示例 -

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

建立 Docker 映象後,我們使用 Kubernetes 管理容器。我們可以使用 YAML 格式建立部署清單,例如 deployment.yaml -

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest
        ports:
        - containerPort: 3000

步驟 6:自動化部署

對於部署階段,我們需要根據應用程式的需求使用藍綠部署、滾動更新或金絲雀釋出等良好的策略。我們可以使用 Terraform 或 Ansible 等基礎設施即程式碼 (IaC) 工具來自動化基礎設施。一個簡單的 Terraform 指令碼可能如下所示 -

provider "aws" {
   region = "us-west-2"
}
resource "aws_instance" "app" {
   ami           = "ami-0c55b159cbfafe1f0"
   instance_type = "t2.micro"
}

步驟 7:監控和日誌記錄

最後,我們需要設定監控和日誌記錄以保持應用程式的健康。我們可以使用 Prometheus 和 Grafana 等工具來監視應用程式效能和系統健康狀況。對於日誌記錄,我們可以使用 ELK Stack,其中包含 Elasticsearch、Logstash 和 Kibana。一個基本的 Logstash 配置可能如下所示 -

input {
   file {
      path => "/var/log/my-app/*.log"
      start_position => "beginning"
   }
}
output {
   elasticsearch {
      hosts => ["https://:9200"]
      index => "my-app-logs-%{+YYYY.MM.dd}"
   }
}

結論

設定 DevOps 管道意味著我們選擇合適的工具。我們配置環境並自動執行構建、測試和部署應用程式的過程。透過遵循這些步驟並使用程式碼示例,我們可以為我們的專案建立一個強大而有效的 DevOps 管道。

DevOps 管道的常見問題

在本節中,我們收集了一組關於 DevOps 管道的常見問題及其答案 -

1. 什麼是 DevOps 中的 CI/CD 管道?

CI/CD 管道是一系列在軟體開發和交付中自動發生的步驟。我們有持續整合 (CI),其中程式碼更改被構建、測試並新增到共享儲存庫中。然後我們有持續交付 (CD),其中構建和測試的程式碼被髮送到不同的環境。CI/CD 管道幫助我們提高軟體質量。它們使交付更快,並讓我們能夠經常釋出更新。

2. 什麼是 Jenkins 管道?

Jenkins 管道是在 CI/CD 管道中按特定順序執行的一系列步驟。我們可以使用宣告式方式或指令碼化方式在 Jenkins 中定義管道。這使我們有機會進行自定義和靈活性。Jenkins 管道可以包含構建、測試、部署和監視應用程式的步驟。

3. Kubernetes 是否是 CI/CD 工具?

Kubernetes 本身並不是 CI/CD 工具。但它在許多 CI/CD 管道中非常重要。Kubernetes 是一個幫助我們管理和擴充套件容器化應用程式的平臺。它具有部署、擴充套件和自我修復等功能。這使得它非常適合自動化我們在 CI/CD 管道中部署和管理應用程式的方式。

廣告
© . All rights reserved.