前端CI/CD流程:自动化部署的正确打开方式

前端CI/CD流程:自动化部署的正确打开方式

毒舌时刻

CI/CD?听起来就像是前端工程师为了显得自己很专业而特意搞的一套复杂流程。你以为配置了CI/CD就能解决所有部署问题?别做梦了!到时候你会发现,CI/CD配置出错的概率比手动部署还高。

你以为随便找个CI/CD工具就能用?别天真了!不同的工具配置方式不同,坑也不同。比如Jenkins的配置文件就像是天书,GitLab CI的YAML语法也能让你崩溃。

为什么你需要这个

  1. 自动化部署:CI/CD可以自动完成代码测试、构建和部署,减少手动操作,提高部署效率。
  2. 减少人为错误:自动化部署可以避免手动部署时的人为错误,提高部署的可靠性。
  3. 快速反馈:CI/CD可以在代码提交后立即进行测试和构建,及时发现问题,提供快速反馈。
  4. 持续集成:CI/CD可以确保代码的持续集成,避免代码冲突和集成问题。
  5. 环境一致性:CI/CD可以确保不同环境的配置一致,避免环境差异导致的问题。

反面教材

# 这是一个典型的手动部署流程 # 1. 手动运行测试 npm test # 2. 手动构建项目 npm run build # 3. 手动上传构建文件到服务器 scp -r build/* user@server:/var/www/html/ # 4. 手动重启服务器 ssh user@server "sudo systemctl restart nginx" 

问题

  • 手动部署容易出错,比如忘记运行测试或构建
  • 部署过程不透明,难以追踪部署历史
  • 环境配置不一致,导致部署失败
  • 部署速度慢,影响开发效率
  • 无法实现自动化回滚,出现问题时难以快速恢复

正确的做法

GitHub Actions配置

# .github/workflows/deploy.yml name: Deploy to Production on: push: branches: - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '16' - name: Install dependencies run: npm install - name: Run tests run: npm test - name: Build project run: npm run build - name: Deploy to server uses: easingthemes/ssh-deploy@v2 with: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} ARGS: '-rltgoDzvO --delete' SOURCE: 'build/' REMOTE_HOST: ${{ secrets.REMOTE_HOST }} REMOTE_USER: ${{ secrets.REMOTE_USER }} TARGET: ${{ secrets.REMOTE_TARGET }} - name: Restart server uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: sudo systemctl restart nginx 

GitLab CI配置

# .gitlab-ci.yml stages: - test - build - deploy test: stage: test image: node:16 script: - npm install - npm test only: - main build: stage: build image: node:16 script: - npm install - npm run build artifacts: paths: - build/ only: - main deploy: stage: deploy image: alpine:latest script: - apk add --no-cache rsync openssh - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H $REMOTE_HOST >> ~/.ssh/known_hosts - rsync -avz --delete build/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_TARGET - ssh $REMOTE_USER@$REMOTE_HOST "sudo systemctl restart nginx" only: - main environment: name: production 

Jenkins配置

// Jenkinsfile pipeline { agent any stages { stage('Checkout') { steps { checkout scm } } stage('Install Dependencies') { steps { sh 'npm install' } } stage('Test') { steps { sh 'npm test' } } stage('Build') { steps { sh 'npm run build' } } stage('Deploy') { steps { sh ''' scp -r build/* user@server:/var/www/html/ ssh user@server "sudo systemctl restart nginx" ''' } } } post { always { echo 'Pipeline completed' } success { echo 'Deployment successful' } failure { echo 'Deployment failed' } } } 

环境变量配置

# .env # 服务器配置 REMOTE_HOST=your-server.com REMOTE_USER=deploy REMOTE_TARGET=/var/www/html/ # SSH密钥(在CI/CD平台的secrets中配置) # SSH_PRIVATE_KEY=your-ssh-private-key 

毒舌点评

CI/CD确实能提高部署效率,但我见过太多开发者滥用这个特性,导致部署流程变得更加复杂。

想象一下,当你花了几个小时配置CI/CD,结果发现部署失败了,你需要调试CI/CD配置,这比手动部署还麻烦。

还有那些过度配置的CI/CD流程,包含了太多不必要的步骤,导致部署时间变得很长。比如每次部署都要运行所有测试,包括那些与当前修改无关的测试。

所以,在使用CI/CD时,一定要把握好度。不要为了自动化而自动化,要根据实际情况来决定CI/CD的配置。

当然,对于大型项目来说,CI/CD是必不可少的。但对于小型项目,过度的CI/CD反而会增加开发成本和维护难度。

最后,记住一句话:CI/CD的目的是为了提高部署效率和可靠性,而不是为了炫技。如果你的CI/CD配置导致部署变得更慢或更不可靠,那你就失败了。

Read more

丹摩智算平台部署 Llama 3.1:实践与体验

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 * 前言 * 部署前的准备 * 创建实例 * 部署与配置 Llama 3.1 * 使用心得 * 总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模型之一。今天,我将通过这次实践,分享在丹摩平台上部署 Llama 3.1 的实际操作流程以及我的个人心得。 部署前的准备 Llama 3.1 是一个资源需求较高的模型,因此在部署之前,首先要确保拥有合适的硬件环境。按照文档中的要求,我选择了 Llama 3.1 8B 版本进行测试。8B 模型对 GPU 显存的需求为

GitHub Copilot转变为兼容API

解锁GitHub Copilot全场景使用!copilot-api让Copilot兼容OpenAI/Anthropic生态 作为开发者,你是否曾因GitHub Copilot仅能在指定IDE中使用而感到受限?是否想让Copilot对接Raycast、Claude Code等工具,却苦于接口不兼容?由ericc-ch开发的copilot-api项目给出了完美答案——这是一个反向工程实现的GitHub Copilot API代理,能将Copilot封装为兼容OpenAI和Anthropic规范的API服务,让你在任意支持该规范的工具中轻松调用Copilot能力,彻底解锁Copilot的全场景使用潜力。 项目核心价值:打破生态壁垒,复用Copilot订阅 GitHub Copilot凭借优秀的代码补全、推理能力成为开发者必备工具,但原生仅支持VS Code、JetBrains等少数IDE,且无公开的标准API接口。而copilot-api的核心作用,就是架起Copilot与OpenAI/Anthropic生态的桥梁: * 对于拥有Copilot订阅(个人/企业/商业版)的开发者,

AI绘画电商产品提示词撰写指南

AI绘画电商产品提示词撰写指南

在电商领域,利用 AI 绘画生成产品图片正逐渐成为提升商品视觉吸引力、提高运营效率的重要手段。而撰写精准有效的提示词,是让 AI 理解并生成符合预期产品图片的关键。 一、明确产品关键信息 产品基础描述 产品类型与用途:清晰界定产品所属类别,无论是服装、电子产品、家居用品还是美妆产品等,这是 AI理解产品的基础。同时,简要说明产品的核心用途或目标受众,可分为3层结构(按优先级排序) * 基础层:明确产品核心属性(避免 AI 生成偏差),包括「产品类别 + 规格 + 材质 / 工艺」,例: “女士夏季短袖连衣裙(长度到膝盖),雪纺面料,蕾丝领口” * 场景层:搭建使用场景(增强代入感),包括「使用环境 + 搭配元素 + 人群画像」,例: “在海边沙滩场景,搭配草编帽和珍珠凉鞋,适合 25-35

【如何使用vscode+github copilot会更加省额度】

【如何使用vscode+github copilot会更加省额度】

这是一份为您定制的 VS Code + GitHub Copilot ($100/年个人版) 深度使用与省流指南。 如果您目前订阅的是 100美元/年(约10美元/月)的 GitHub Copilot Individual (现通常称为 Pro 版),虽然基础代码补全通常是无限制的,但在使用高级大模型(Premium Models,如 Claude 3.5/4.5 Sonnet, GPT-4o 等)进行对话 (Chat) 时,是存在“高级请求额度 (Premium Requests Limit)”或动态计算系统的。一旦超标,要么会被限速,要么只能降级使用基础模型。 以下是详细的收费标准说明与极端的“省流”实操指南。 📘 GitHub Copilot