前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊使用Docker自动化构建及部署测试环境

聊聊使用Docker自动化构建及部署测试环境

原创
作者头像
漫谈测试
发布2025-03-27 10:49:40
发布2025-03-27 10:49:40
20400
代码可运行
举报
文章被收录于专栏:漫谈测试漫谈测试
运行总次数:0
代码可运行

使用Docker实现自动化构建及部署,需要配置GitHub仓库,设置Secrets,编写CI/CD工作流文件,处理构建、测试、推送、部署的各个阶段,最后验证自动化流程是否生效。还有需要考虑到GitHub Actions的YAML文件格式是否正确,命令是否正确,比如在部署阶段使用ssh连接到服务器执行命令是否正确,是否需要安装特定插件或配置免密登录等。

一、架构设计

mermaid

代码语言:javascript
代码运行次数:0
运行
复制
graph LR  A[代码仓库] -->|Push 代码| B(CI/CD 工具)  B --> C{构建镜像}  C -->|成功| D[运行测试]  C -->|失败| E[通知开发者]  D -->|测试通过| F[推送镜像到仓库]  D -->|测试失败| E  F --> G[自动部署到测试环境]

二、核心组件

三、具体实现步骤

(1) 准备 Dockerfile​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
# 前端示例(Node.js)FROM node:18-alpine as builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run buildFROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/htmlEXPOSE 80

(2) 配置 CI/CD(以 GitHub Actions 为例)

创建 .github/workflows/deploy.yml:​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
name: Auto Build & Deployon:  push:    branches: [ "main" ]jobs:  build-test-deploy:    runs-on: ubuntu-latest    steps:    - name: Checkout code      uses: actions/checkout@v4    - name: Build Docker image      run: |        docker build -t ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }} .    - name: Run Unit Tests      run: |        docker run ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }} npm test    - name: Login to Docker Hub      uses: docker/login-action@v3      with:        username: ${{ secrets.DOCKER_USERNAME }}        password: ${{ secrets.DOCKER_PASSWORD }}    - name: Push Docker Image      run: |        docker push ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}    - name: Deploy to Test Server      uses: appleboy/ssh-action@v1      with:        host: ${{ secrets.TEST_SERVER_IP }}        username: ${{ secrets.SSH_USERNAME }}        key: ${{ secrets.SSH_PRIVATE_KEY }}        script: |          docker pull ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}          docker stop test-app || true          docker rm test-app || true          docker run -d --name test-app -p 80:80 \            ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}

(3) 配置 Secrets

在 GitHub 仓库设置中配置:​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
DOCKER_USERNAME:Docker Hub 用户名DOCKER_PASSWORD:Docker Hub 密码/TokenTEST_SERVER_IP:测试服务器IPSSH_USERNAME:服务器SSH用户名SSH_PRIVATE_KEY:服务器SSH私钥

四、高级优化方案

(1) 使用镜像标签策略​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
# 使用提交哈希和日期组合标签TAG=${{ github.sha }}-$(date +%Y%m%d)docker build -t myapp:$TAG .

(2) 健康检查

在 Dockerfile 中添加:​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
HEALTHCHECK --interval=30s --timeout=3s \  CMD curl -f http://localhost/health || exit 1

(3) 自动清理旧镜像

在部署脚本中添加:​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
# 保留最近3个镜像docker images | grep myapp | awk '{print $3}' | tail -n +4 | xargs docker rmi

(4) 邮件/钉钉通知

在 GitHub Actions 中添加:

代码语言:javascript
代码运行次数:0
运行
复制
- name: Send Notification  if: always()  uses: dawidd6/action-send-mail@v3  with:    server: smtp.example.com    username: ${{ secrets.MAIL_USER }}    password: ${{ secrets.MAIL_PASSWORD }}    to: dev-team@company.com    subject: "Deploy Status: ${{ job.status }}"    body: "Build ${{ github.sha }} completed. View details: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"

五、全流程验证

提交代码到 main 分支

自动触发 GitHub Actions

查看构建日志:

https://github.com/<用户名>/<仓库>/actions

检查测试环境:

curl http://测试服务器IP

六、故障排查技巧

七、 成本优化建议

使用多阶段构建:减小最终镜像体积

镜像分层优化:将频繁变化的层放在 Dockerfile 下方

使用缓存镜像:在 CI/CD 中配置缓存目录​​​​​​​

代码语言:javascript
代码运行次数:0
运行
复制
- name: Cache Docker layers  uses: actions/cache@v3  with:    path: /tmp/.buildx-cache    key: ${{ runner.os }}-buildx-${{ github.sha }}

选择合适的基础镜像:优先使用 Alpine 等精简版本

阅读后若有收获,不吝关注,分享等操作!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、架构设计
  • 二、核心组件
  • 三、具体实现步骤
    • (1) 准备 Dockerfile​​​​​​​
    • (2) 配置 CI/CD(以 GitHub Actions 为例)
    • (3) 配置 Secrets
  • 四、高级优化方案
    • (1) 使用镜像标签策略​​​​​​​
    • (2) 健康检查
    • (3) 自动清理旧镜像
    • (4) 邮件/钉钉通知
  • 五、全流程验证
  • 六、故障排查技巧
  • 七、 成本优化建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档