GitLab CI/CD 中执行打包

在 GitLab CI/CD 中执行打包操作通常涉及 依赖安装、编译代码、生成制品 等步骤。以下是针对不同技术栈的完整打包实现方案:


一、通用打包流程设计

1. 基础阶段划分
stages:
  - install  # 安装依赖
  - build    # 编译打包
  - package  # 生成最终制品
2. 关键配置项
配置项作用说明示例值
artifacts保存打包结果供后续使用paths: [dist/]
cache缓存依赖加速下次构建key: ${CI_COMMIT_REF_SLUG}
image指定打包环境node:16 / maven:3.8

二、不同技术栈实现示例

1. 前端项目(Webpack/Vite)
build_frontend:
  stage: build
  image: node:16
  cache:
    key: frontend-${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  script:
    - npm install
    - npm run build  # 通常输出到 dist/ 目录
  artifacts:
    paths:
      - dist/       # 归档打包结果
    expire_in: 1 week
2. Java 项目(Maven)
package_java:
  stage: package
  image: maven:3.8-openjdk-11
  variables:
    MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  cache:
    paths:
      - .m2/repository/
  script:
    - mvn package -DskipTests  # 生成 target/*.jar
  artifacts:
    paths:
      - target/*.jar
3. Python 项目(Docker 化打包)
build_python:
  stage: build
  image: python:3.9
  script:
    - pip install -r requirements.txt
    - python setup.py bdist_wheel  # 生成 dist/*.whl
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  artifacts:
    paths:
      - dist/*.whl
4. Go 项目(多平台打包)
build_go:
  stage: build
  image: golang:1.18
  script:
    - go build -o bin/
    - tar czf release.tar.gz bin/  # 压缩打包
  artifacts:
    paths:
      - release.tar.gz

三、高级打包技巧

1. 多环境差异化打包
build:
  script:
    - |
      case $DEPLOY_ENV in
        "prod")   npm run build:prod ;;
        "staging") npm run build:staging ;;
        *)        npm run build ;;
      esac
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      variables:
        DEPLOY_ENV: "prod"
    - variables:
        DEPLOY_ENV: "staging"
2. 动态版本号
set_version:
  stage: build
  script:
    - echo "APP_VERSION=$(date +%Y%m%d)-${CI_PIPELINE_IID}" > version.env
  artifacts:
    reports:
      dotenv: version.env  # 传递给后续Job

package:
  needs: ["set_version"]
  script:
    - echo "Packaging v$APP_VERSION"
    - tar czf app-$APP_VERSION.tar.gz dist/
3. 并行打包(多架构 Docker 镜像)
build_docker:
  stage: package
  parallel:
    matrix:
      - ARCH: ["amd64", "arm64"]
  script:
    - docker buildx build --platform linux/$ARCH -t app:$ARCH .

四、错误处理与优化

1. 依赖安装缓存
cache:
  key: ${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME}
  paths:
    - node_modules/  # 前端
    - .m2/repository # Java
    - venv/          # Python
2. 资源清理
after_script:
  - rm -rf tmp/  # 清理临时文件
3. 超时控制
build_monolithic_app:
  script: ./build_large_app.sh
  timeout: 2 hours  # 延长超时时间

五、完整 Pipeline 示例

stages:
  - setup
  - build
  - package

install_deps:
  stage: setup
  image: node:16
  cache:
    key: npm-${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  script:
    - npm ci --prefer-offline  # 精准安装依赖

build_app:
  stage: build
  needs: ["install_deps"]
  script:
    - npm run build
  artifacts:
    paths:
      - dist/

package_prod:
  stage: package
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
  script:
    - tar czf app-${CI_COMMIT_SHORT_SHA}.tar.gz dist/
    - aws s3 cp app-*.tar.gz s3://my-bucket/
  artifacts:
    paths:
      - app-*.tar.gz

关键要点

  1. 隔离环境:使用 Docker 镜像确保环境一致性
  2. 增量构建:合理利用缓存加速重复流程
  3. 产物管理:通过 artifacts 传递打包结果
  4. 安全存储:敏感文件(如 .env)应通过 CI/CD 变量传递

根据项目实际需求调整打包策略,可通过 gitlab-runner exec 命令在本地测试验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fro.Heart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值