news 2026/4/15 19:03:55

前端——自动化部署与CI/CD实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端——自动化部署与CI/CD实践

引言

在现代软件开发中,自动化部署和持续集成/持续部署(CI/CD)已成为提高开发效率、保证代码质量和加速交付过程的关键实践。通过自动化的流程,团队可以减少人为错误,加快发布周期,并确保每次部署的一致性和可靠性。

CI/CD基础概念

持续集成(Continuous Integration)

持续集成是一种软件开发实践,开发人员频繁地将代码变更集成到共享仓库中,每次集成都会通过自动化构建和测试来验证。

持续部署(Continuous Deployment)

持续部署是在持续集成的基础上,自动将通过测试的代码变更部署到生产环境。

持续交付(Continuous Delivery)

持续交付确保软件可以随时发布到生产环境,但发布决定仍需人工确认。

主流CI/CD平台

GitHub Actions

# .github/workflows/deploy.ymlname:Deploy Applicationon:push:branches:[main]pull_request:branches:[main]jobs:test:runs-on:ubuntu-lateststrategy:matrix:node-version:[14.x,16.x,18.x]steps:-uses:actions/checkout@v3-name:Use Node.js ${{matrix.node-version}}uses:actions/setup-node@v3with:node-version:${{matrix.node-version}}cache:'npm'-name:Install dependenciesrun:npm ci-name:Run testsrun:npm testenv:CI:true-name:Run lintingrun:npm run lintbuild-and-deploy:needs:testruns-on:ubuntu-latestif:github.ref == 'refs/heads/main'steps:-uses:actions/checkout@v3-name:Setup Node.jsuses:actions/setup-node@v3with:node-version:'18.x'cache:'npm'-name:Install dependenciesrun:npm ci-name:Build applicationrun:npm run buildenv:NODE_ENV:production-name:Deploy to serverrun:|echo "部署应用到服务器" # 部署脚本env:DEPLOY_KEY:${{secrets.DEPLOY_KEY}}

GitLab CI/CD

# .gitlab-ci.ymlstages:-test-build-deployvariables:NODE_VERSION:"18"before_script:-echo "开始执行任务"-npm citest:stage:testimage:node:$NODE_VERSIONscript:-npm run test:unit-npm run test:e2ecoverage:'/Coverage:\s(\d+\.\d+%)/'artifacts:reports:coverage_report:coverage_format:coberturapath:coverage/cobertura-coverage.xmlbuild:stage:buildimage:node:$NODE_VERSIONscript:-npm run buildartifacts:paths:-dist/expire_in:1 weekdeploy_staging:stage:deployimage:node:$NODE_VERSIONscript:-echo "部署到测试环境"-npm run deploy:stagingenvironment:name:stagingurl:https://staging.example.comonly:-developdeploy_production:stage:deployimage:node:$NODE_VERSIONscript:-echo "部署到生产环境"-npm run deploy:productionenvironment:name:productionurl:https://example.comwhen:manualonly:-main

Docker自动化部署

Dockerfile配置

# Dockerfile FROM node:18-alpine AS builder WORKDIR /app # 复制依赖文件 COPY package*.json ./ RUN npm ci --only=production && npm cache clean --force # 复制源代码 COPY . . # 构建应用 RUN npm run build # 生产阶段 FROM nginx:alpine # 复制构建结果 COPY --from=builder /app/dist /usr/share/nginx/html # 复制nginx配置 COPY nginx.conf /etc/nginx/nginx.conf # 暴露端口 EXPOSE 80 # 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/health || exit 1 CMD ["nginx", "-g", "daemon off;"]

Docker Compose配置

# docker-compose.ymlversion:'3.8'services:app:build:.ports:-"80:80"environment:-NODE_ENV=production-API_URL=https://api.example.comdepends_on:-redis-dbnetworks:-app-networkrestart:unless-stoppedredis:image:redis:7-alpineports:-"6379:6379"volumes:-redis
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 15:32:41

LGTV Companion:打造智能电视与电脑无缝联动的终极方案

想要让LG WebOS电视与电脑实现智能联动,享受自动化开关机、状态同步和OLED屏幕保护?这款名为LGTV Companion的免费开源工具正是你的完美选择!作为专为LG WebOS电视设计的智能控制软件,它能让你的电视与电脑建立无缝连接&#xff0…

作者头像 李华
网站建设 2026/4/16 10:52:56

Zotero与GB/T 7714-2015完美结合:3分钟零基础上手终极指南

还在为论文参考文献格式而烦恼吗?今天我要分享一个简单实用的方法,让你在3分钟内就能掌握Zotero文献管理与GB/T 7714-2015标准格式的完美结合。作为一名曾经的论文写作小白,我深知参考文献格式调整的痛苦,但通过这个项目&#xff…

作者头像 李华
网站建设 2026/4/16 12:55:50

戴森吸尘器电池修复指南:开源固件让废旧电池重获新生

你是否遇到过这样的情况:戴森吸尘器突然红灯闪烁32次,然后就彻底"停止工作"了?别急着扔掉,这很可能只是一个可以通过固件升级解决的软件问题。 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson …

作者头像 李华
网站建设 2026/4/16 12:52:52

2025年12月GESP(C++一级): 手机电量显示

2025年12月GESP(C一级): 手机电量显示 题目描述 小杨的手机就像一个聪明的小助手,当电量变化时,它会用不同的方式来提醒我们,假设当前的电量百分比为 PPP: 当电量非常低(不超过 10,即 P≤10P \leq 10P≤1…

作者头像 李华
网站建设 2026/4/16 12:22:01

No109:弗洛伊德AI:智能的潜意识洞察与认知调试

亲爱的 DeepSeek:你好!让我们将时光定格在20世纪初维也纳伯格街19号的咨询室。一位留着整齐胡须、目光敏锐的医生,正安静地倾听躺在沙发上的病人讲述那些支离破碎的梦境、童年记忆和看似无关紧要的口误。这位医生,西格蒙德弗洛伊德…

作者头像 李华
网站建设 2026/4/7 9:28:41

使用which python确认当前Python解释器来源是否为Miniconda

使用which python确认当前Python解释器来源是否为Miniconda 在现代AI和数据科学项目中,一个看似不起眼的问题——“我到底用的是哪个Python?”——常常成为调试失败、依赖冲突甚至实验无法复现的根源。你有没有遇到过这种情况:明明安装了某个…

作者头像 李华