CI

gitlab CI 配置示例

stages:
  - pages
  - check
  - test
  - build
  - pack
  - deploy

default:
  cache:
    # 缓存所有 gitignore 中忽略的文件和目录,用于 build 的文件向下传递
    untracked: true
    when: on_success
    key: $CI_COMMIT_SHORT_SHA

.install-pnpm: &install-pnpm
  - export PRISMA_BINARY_MIRROR=xxx
  - npm config set registry xxx
  - npm install -g pnpm@latest-8
  - pnpm config set store-dir .pnpm-store

.install-deps: $install-deps
  - pnpm install

.login2harbor: &login2harbor
  - echo -n "$HARBOR_PASSWORD" | docker login "$HARBOR_PASSWORD" -u "$HARBOR_USERNAME" --password-stdin

# 代码风格及类型检查
check:lint
  stage: check
  image: xx
  before_script:
    - *install-pnpm
    - *install-deps
  script:
    - pnpm run lint
    - pnpm run type-check
  rules:
    # 在合并请求时执行
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    # 打标签时执行
    - if: $CI_COMMIT_TAG
    # 受保护分支发生变动执行
    - if: $CI_COMMIT_REF_PROJECTED
    # 指定分支变化时执行
    # - if: $CI_COMMIT_BRANCH == 'dev'
    # 默认分支发生变化
    # - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
# 编译构建
build:dist
  stage: build
  image: xxx
  before_script: 
    - *install-pnmpm
    - *install-deps
  script:
    - pnpm run build
  rules:
    # 打标签时执行
    - if: $CI_COMMIT_TAG
  # 产物  default 没有配置 cache 时,需要 artifactx 向后传递产物
  # artifactx:
  #   path:
  #     - dist

# 打包压缩
pack:gz
  stage: pack
  image: xxx
  dependencies:
    - build:dist
  needs: ['build:dist']
  script:
    - ls -a
    - rm -rf ./tmp
    - mkdir -p ./tmp
    - cp -r dist tmp
    - cd tmp
    - tar -cvzf dist.tar.gz dist
    - cd ../
  rules:
    # 打标签时执行
    - if: $CI_COMMIT_TAG

# 部署
deploy:135
  stage: deploy
  image: xxx
  dependencies:
    - build:dist
  needs: ['build:dist']
  script:
    - ls -a
    - ssh -o "StrictHostKeyChecking=no" root@172.21.44.135 "rm -rf /home/dist"
    - scp -o "StrictHostKeyChecking=no" -r dist root@172.21.44.135:/home
  rules:
    # 打标签时执行
    - if: $CI_COMMIT_TAG

# Pages
pages:
  stage: pages # pages 须放在第一步执行
  image: node:latest
  before_script:
    - *install-pnpm
    - *install-deps
  script:
    - pnpm run build:docs
  artifacts:
    paths:
      # 只能为 public
      - public
  # 手动触发
  when: manual