Gitlab CICD 前端项目构建

2025-01-08 42 0

环境

gitlab: 11.11.8
gitlab-runner: 14.4.0
nodejs: v14.21.3
pm2: 5.4.2

实现效果

  1. 提交代码到demo分支 才触发流水线
  2. 判断package.json或package-lock.json 是否发生变化
    • 若变化 则执行build+install阶段进行构建并同步代码
    • 若没变化 则只是执行deploy阶段仅同步代码
  3. pm2 重启
  4. 可选 手动构建

.gitlab-ci.yml

# 定义缓存的内容和路径
cache:
  key: ${CI_COMMIT_REF_SLUG}  # 使用分支名作为缓存的 key
  policy: pull-push
  paths:
    - node_modules/           # 缓存 node_modules 目录
stages:
  - build
  - deploy
  - manual_install_package
build:
  stage: build
  script:
    - npm install
#- npm install --registry=https://registry.npmmirror.com --sass_binary_site=https://registry.npmmirror.com/node-sass --unsafe-perm
#   artifacts:
#     paths:
#       - node_modules/         # 把 node_modules 作为 artifacts 保存下来供后续多个stages Job使用
  only:
    #variables:
    #  - $CI_COMMIT_MESSAGE =~ /build:demo/i
    refs:
      - demo
    changes:
      - package.json
      - package-lock.json
deploy:
  stage: deploy
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
    policy: pull
  script:
    - rsync -avu --delete --exclude='.git/' . /data/web/$CI_PROJECT_NAME/
    # - |
    #   if [ -d /data/web/$CI_PROJECT_NAME ] && [ ! -L /data/web/$CI_PROJECT_NAME ]; then
    #     echo "Error: /data/web/$CI_PROJECT_NAME exists and is a directory." >&2
    #     exit 1
    #   elif [ ! -L /data/web/$CI_PROJECT_NAME ]; then
    #     ln -s "$(pwd)" /data/web/$CI_PROJECT_NAME
    #   fi
    - cd /data/web/$CI_PROJECT_NAME
    - pm2 restart server.json --update-env
  only:
    refs:
      - demo
manual_install_package:
  stage: manual_install_package
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  after_script:
    - node -v && npm -v
  script:
    - npm install
    - cd /data/web/$CI_PROJECT_NAME
    - pm2 restart server.json --update-env
  when: manual
  only:
    refs:
      - demo

注:不是想着更新快点 就使用软链接。因为重置机器人编号会变化 导致软链接对不上

image.png

image.png

相关文章

使用pgloader 将Gitlab MySQL迁移至Postgresql

发布评论