uni-app CI/CD 集成
章节介绍
CI/CD(持续集成/持续部署)是现代软件开发中的重要实践,它可以帮助开发者自动化构建、测试和部署流程,提高开发效率和代码质量。对于 uni-app 这样的跨平台框架,CI/CD 尤为重要,因为需要为多个平台构建和部署应用。本章节将介绍 uni-app 应用的 CI/CD 集成方法,包括持续集成、自动化构建和部署流程。
核心知识点
1. CI/CD 基础概念
- 持续集成(CI):开发者将代码频繁集成到共享仓库,每次集成都会自动运行构建和测试,以尽早发现问题
- 持续部署(CD):将通过测试的代码自动部署到生产环境,实现快速交付
- 持续交付:将通过测试的代码准备好部署到生产环境,但需要手动触发部署
2. 常用 CI/CD 平台
在 uni-app 开发中,常用的 CI/CD 平台包括:
- GitHub Actions:GitHub 提供的 CI/CD 服务,与 GitHub 仓库无缝集成
- GitLab CI/CD:GitLab 内置的 CI/CD 服务,功能强大且易于配置
- Jenkins:开源的自动化服务器,支持自定义构建流程
- Travis CI:托管式 CI 服务,易于配置和使用
- CircleCI:现代化的 CI/CD 平台,提供快速的构建环境
3. 自动化构建流程
uni-app 应用的自动化构建流程通常包括以下步骤:
- 代码检出:从版本控制系统中检出代码
- 依赖安装:安装项目依赖
- 代码质量检查:运行代码 lint 和静态分析
- 单元测试:运行单元测试
- 构建应用:为不同平台构建应用
- 端到端测试:运行端到端测试(可选)
- 部署应用:将构建产物部署到目标平台
4. 多平台构建配置
由于 uni-app 需要为多个平台构建应用,CI/CD 配置需要考虑不同平台的构建需求:
- Web 端:构建静态文件并部署到静态网站托管服务
- 小程序:构建小程序代码包并上传到小程序平台
- App 端:构建原生应用安装包并部署到应用商店
实用案例
案例:使用 GitHub Actions 实现 uni-app CI/CD
1. 配置文件结构
在项目根目录创建 .github/workflows 目录,并在其中创建 CI/CD 配置文件:
.github/
workflows/
ci-cd.yml2. 基础 CI 配置
配置 GitHub Actions 实现代码质量检查和单元测试:
# .github/workflows/ci-cd.yml
name: uni-app CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Lint code
run: npm run lint
- name: Run tests
run: npm run test3. 多平台构建配置
扩展配置文件,添加多平台构建功能:
# .github/workflows/ci-cd.yml
name: uni-app CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
release:
types: [ published ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Lint code
run: npm run lint
- name: Run tests
run: npm run test
build-web:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build web
run: npm run build:h5
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist/build/h5
build-app:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build Android
run: npm run build:app-android
- name: Build iOS
run: npm run build:app-ios
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: app-packages
path: ./unpackage/release案例:使用 GitLab CI/CD 实现 uni-app 自动部署
1. 配置文件结构
在项目根目录创建 .gitlab-ci.yml 文件:
.gitlab-ci.yml2. GitLab CI 配置
# .gitlab-ci.yml
stages:
- test
- build
- deploy
variables:
NODE_VERSION: '16'
.test_job:
stage: test
image: node:$NODE_VERSION
script:
- npm install
- npm run lint
- npm run test
build_web:
stage: build
image: node:$NODE_VERSION
script:
- npm install
- npm run build:h5
artifacts:
paths:
- ./dist/build/h5
only:
- tags
build_app:
stage: build
image: node:$NODE_VERSION
script:
- npm install
- npm run build:app-android
- npm run build:app-ios
artifacts:
paths:
- ./unpackage/release
only:
- tags
deploy_web:
stage: deploy
image: node:$NODE_VERSION
script:
- npm install -g surge
- surge ./dist/build/h5 ${{ secrets.SURGE_DOMAIN }} --token ${{ secrets.SURGE_TOKEN }}
dependencies:
- build_web
only:
- tags案例:使用 Jenkins 实现 uni-app 自动化构建
1. Jenkins 配置
- 安装 Jenkins:根据官方文档安装 Jenkins
- 安装插件:安装 Node.js 插件、Git 插件等必要插件
- 配置 Node.js:在 Jenkins 全局工具配置中添加 Node.js 安装
2. Jenkins 流水线配置
创建 Jenkins 流水线项目,并配置 Jenkinsfile:
// Jenkinsfile
pipeline {
agent any
tools {
nodejs 'Node16'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Install Dependencies') {
steps {
sh 'npm install'
}
}
stage('Lint') {
steps {
sh 'npm run lint'
}
}
stage('Test') {
steps {
sh 'npm run test'
}
}
stage('Build') {
parallel {
stage('Build Web') {
steps {
sh 'npm run build:h5'
}
}
stage('Build App') {
steps {
sh 'npm run build:app-android'
sh 'npm run build:app-ios'
}
}
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
sh 'echo "Deploying to production..."'
// 部署命令
}
}
}
post {
success {
echo 'Build succeeded!'
}
failure {
echo 'Build failed!'
}
}
}实用案例
案例:uni-app 多平台自动构建与部署
1. 项目配置
- package.json 配置:
{
"scripts": {
"dev:h5": "uni-app dev:h5",
"build:h5": "uni-app build:h5",
"dev:mp-weixin": "uni-app dev:mp-weixin",
"build:mp-weixin": "uni-app build:mp-weixin",
"dev:app-plus": "uni-app dev:app-plus",
"build:app-plus": "uni-app build:app-plus",
"lint": "eslint --ext .vue,.js,.jsx,.cjs,.mjs src/ --fix --ignore-path .gitignore",
"test": "jest"
}
}2. GitHub Actions 完整配置
# .github/workflows/ci-cd.yml
name: uni-app CI/CD
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
release:
types: [ published ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Lint code
run: npm run lint
- name: Run tests
run: npm run test
build-mp-weixin:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build WeChat Mini Program
run: npm run build:mp-weixin
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: mp-weixin
path: ./dist/build/mp-weixin
build-h5:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build H5
run: npm run build:h5
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist/build/h5
build-app:
needs: test
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Build App
run: npm run build:app-plus
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: app-plus
path: ./unpackage/release学习目标
通过本章节的学习,你应该能够:
- 了解 CI/CD 的基础概念和重要性
- 掌握常用 CI/CD 平台的选择方法
- 学会配置 uni-app 应用的自动化构建流程
- 学会实现多平台构建和部署
- 理解如何通过 CI/CD 提高开发效率和代码质量
章节总结
本章节介绍了 uni-app 应用的 CI/CD 集成方法,包括持续集成、自动化构建和部署流程。CI/CD 是现代软件开发中的重要实践,它可以帮助开发者自动化构建、测试和部署流程,提高开发效率和代码质量。对于 uni-app 这样的跨平台框架,CI/CD 尤为重要,因为需要为多个平台构建和部署应用。
在实际开发中,建议开发者根据项目需求选择合适的 CI/CD 平台,并配置完整的构建和部署流程。通过 CI/CD,开发者可以实现代码的自动构建、测试和部署,减少手动操作,提高开发效率和代码质量。同时,CI/CD 也可以帮助开发者在开发过程中及时发现和修复问题,确保应用的稳定性和可靠性。