云原生 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 流水线:
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
:
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
中添加测试脚本:
"scripts": {
"test": "jest"
}
4. 持续交付设置
4.1 构建 Docker 镜像
创建 Dockerfile
文件以构建应用的 Docker 镜像:
# 使用官方 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
中添加部署步骤:
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. 监控与反馈
一旦部署完成,可以使用工具如 Prometheus 和 Grafana 进行监控,通过日志系统(如 ELK Stack)获取反馈信息,从而实现持续改进。