CI/CD自动化部署(持续集成和持续交付/部署)

  • 持续集成:开发人员频繁地将代码集成到共享仓库,然后自动运行测试
  • 持续交付:自动准备好发布,但需要手动触发部署【workflow_dispatch: # 允许手动触发】
  • 持续部署:完全自动化的,不需要人工干预

流程:

比如,当开发人员提交代码到版本控制系统(比如GitHub),然后触发CI流程,自动运行测试、构建,如果成功的话就进行部署。常见的工具可能有Jenkins、GitLab CI、Travis CI、CircleCI或者GitHub Actions这些。需要配置这些工具来监听代码变更,然后执行一系列步骤。

常用工具:

  • CI/CD 平台 :Jenkins、GitLab CI、GitHub Actions、CircleCI、Travis CI。

  • 容器化 :Docker、Kubernetes。

  • 部署工具:Ansible、Terraform、Helm。

实施步骤:

选择工具:根据项目需求选择工具(如GitHub Actions适合GitHub仓库用户)。

配置代码仓库

  • 在版本控制系统(如GitHub)中托管代码。

  • 设置分支策略(如main分支用于生产,dev分支用于开发)。

编写 CI/CD 配置文件

php 复制代码
# .github/workflows/deploy.yml

name: Build and Deploy     #更新到服务器
on:
  push:
    # push 代码的时候,那个分支会收到影响,这里是mian主分支
    branches: [ main ]

# 推送之后执行一系列的任务
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
       # 获取代码
      - name: Checkout code
       # 使用action库 action/checkout获取代码
        uses: actions/checkout@v4
      - name: Install Node.js    # 安装node
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Install dependencies # 安装依赖
        run: npm install
      - name: Run tests
        run: npm test
      - name: Build project
        run: npm run build
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to server
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/my-app
            git pull origin main
            npm install --production
            pm2 restart my-app

敏感信息管理

  • 使用CI/CD工具的Secrets功能(如GitHub Secrets)存储SSH密钥、API令牌等。

流水线

多环境部署

  • 分阶段部署(开发 → 测试 → 生产),通过条件判断或手动审批控制流程

示例环境判断

php 复制代码
deploy-prod:
  needs: test
  if: github.ref == 'refs/heads/main'
  runs-on: ubuntu-latest
  steps: [...]

gitlab实现自动化部署

gitlab支持通过配置CI/CD实现自动化部署我们的代码项目,主要核心就是配置gitlab-ci.yml文件以及在目标服务器上配置gitlab-runner

总结:

  • 项目根目录创建yml文件(选择手动部署好处:频繁自动化部署消耗性能)
  • 提交push后,远程会自动读取yml文件,触发自动化安装,编译,部署(有默认的share runner可选择不安装project runners)
  • 点击,部署

gitlab项目新增:.gitlab-ci.yml,如:

php 复制代码
stages:
  - build
  - run
  - clean

build:
  stage: build
  only:
    - master
  script:
    - docker build -t test-cicd:v1.0.0 .

run:
  stage: run
  only:
    - master
  script:
    - docker-compose down
    - docker-compose up -d


clean:
  stage: clean
  only:
    - master
  script:
    - docker image prune -f

gitlab上查看gitlab-runner配置方法

优势:

提高开发效率:自动化重复任务,减少手动操作

早期发现问题:快速反馈代码问题

提高软件质量:强制运行测试和代码检查

gitlab实现CI/CD自动化部署_gitlab cicd自动化部署-CSDN博客

相关推荐
翼龙云_cloud14 分钟前
阿里云渠道商:在更换阿里云 GPU 公网 IP 时,如何确保数据的安全性?
运维·服务器·tcp/ip·阿里云·云计算
爱喝水的鱼丶15 分钟前
SAP-ABAP:通过接口创建生产订单报“没有工艺路线选中”错误解决办法详解
运维·开发语言·sap·abap·bapi·生产订单
山川而川-R34 分钟前
在香橙派5pro上的ubuntu22.04系统烧录镜像_2_12.23
linux·运维·服务器
Run_Teenage43 分钟前
Linux:进程程序替换
linux·运维·服务器
学习3人组1 小时前
docker run 命令详解
运维·docker·容器
UpgradeLink1 小时前
NoteGen:轻量跨端笔记应用,搭配UpgradeLink系统,体验极致笔记之旅
开源·自动化·tauri·upgradelink·应用升级
11小猪会飞111 小时前
.net使用Jenkins 构建、部署到windows服务器上
运维·jenkins
rayylee1 小时前
使用 Windows 自带 ssh 的 X11转发功能并配置 ssh 和 VSCode
linux·运维
枉费红笺1 小时前
Linux / macOS 环境下解压 ZIP 文件的标准命令与常用变体
linux·运维·macos
云游牧者1 小时前
ubuntu 22.04系统修改网卡名称方法
linux·运维·ubuntu