云时代必修课-云原生CICD(持续集成与交付)全流程实战(高の青)

2024-08-26 10:00:13 浏览数 (2)

云原生 CI/CD(持续集成与持续交付)是现代软件开发中的重要组成部分。它使团队能够快速、高效地构建、测试和交付应用程序。

1. 项目准备

1.1 创建一个简单的应用

我们将使用 Node.js 创建一个简单的 Web 应用。

代码语言:txt复制
// app.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('Hello, World!');
});

app.listen(port, () => {
    console.log(`App listening at http://localhost:${port}`);
});

1.2 初始化项目

在项目目录中运行以下命令初始化 Node.js 项目:

代码语言:txt复制
npm init -y
npm install express

2. 版本控制

使用 Git 进行版本控制:

代码语言:txt复制
git init
git add .
git commit -m "Initial commit"

3. 持续集成设置

3.1 使用 GitHub Actions

创建 .github/workflows/ci.yml 文件,定义 CI 流水线:

代码语言:txt复制
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - run: npm install
    - run: npm test

3.2 编写测试

为了测试我们的应用,我们可以添加一个简单的测试框架,例如 Jest

代码语言:txt复制
npm install --save-dev jest

添加以下测试文件 app.test.js

代码语言:txt复制
const request = require('supertest');
const app = require('./app');

describe('GET /', () => {
  it('responds with Hello, World!', async () => {
    const response = await request(app).get('/');
    expect(response.text).toBe('Hello, World!');
  });
});

package.json 中添加测试脚本:

代码语言:txt复制
"scripts": {
  "test": "jest"
}

4. 持续交付设置

4.1 构建 Docker 镜像

创建 Dockerfile 文件以构建应用的 Docker 镜像:

代码语言:txt复制
# 使用官方 Node.js 镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

4.2 使用 GitHub Actions 部署到 Docker Hub

.github/workflows/deploy.yml 中添加部署步骤:

代码语言:txt复制
name: Deploy to Docker Hub

on:
  push:
    branches: [ main ]

jobs:
  deploy:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        push: true
        tags: user/repo:latest
      env:
        DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
        DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}

请确保将 Docker Hub 的用户名和密码添加到 GitHub Secrets 中,以便安全存储。

5. 监控与反馈

一旦部署完成,可以使用工具如 PrometheusGrafana 进行监控,通过日志系统(如 ELK Stack)获取反馈信息,从而实现持续改进。

0 人点赞