node:基于gitlab的ci发布脚本

CI脚本

stages:
  - build
  - deploy

variables:
  PKG: $CI_PROJECT_NAME

install dependencies:
  stage: build
  tags:
    - f2e
  only:
    - master
  except:
    changes:
      - "*.md"
  cache:
    key: "${CI_PROJECT_PATH}-${CI_COMMIT_REF_NAME}"
    paths:
      - node_modules/
    policy: pull-push
  script:
    # - cnpm install --production
    - tar zcf ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz * .eslint* # 打代码包,做为 artifacts
    - md5sum ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz > ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz.md5
  artifacts:
    paths:
      - ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz
      - ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz.md5
    expire_in: 1 week

# 只有一个环境,test2服务器
deploy to test2 environment:
  stage: deploy
  tags:
    - f2e
  only:
    - master
  except:
    changes:
      - "*.md"
  variables:
    GIT_STRATEGY: none
  dependencies:
    - install dependencies
  script:
    # - tar xf ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz
    - ./bin/deploy-test.sh ${PKG} ${CI_COMMIT_SHA:0:8}
# 在生产环境(生产机)上部署应用
# deploy-pro to production environment:
#   stage: deploy-pro
#   tags:
#     - f2e
#     - bash
#   only:
#     - master
#     - shelltest
#   except:
#     changes:
#       - "*.md"
#   variables:
#     GIT_STRATEGY: none
#   dependencies:
#     - install dependencies
#   script:
#     - mv ${PKG}-${CI_COMMIT_SHA:0:8}.tar.gz* /var/cache/deploy/
#     - sudo /opt/bin/deploy-f2e-seo-server ${PKG} ${CI_COMMIT_SHA:0:8}

deploy-test.sh

#!/bin/bash
# 应用运维脚本

PKG=$1
COMMIT_SHA=$2

TARGET_DIR=/var/www/node_project/$PKG
SOURCE_DIR="$(pwd)"

md5sum --status -c ${PKG}-${COMMIT_SHA}.tar.gz.md5
if [ $? -eq 0 ]; then
  # 更新代码库
  echo "更新代码库"
  rm -rf $TARGET_DIR
  mkdir $TARGET_DIR
  tar xf $SOURCE_DIR/$PKG-$COMMIT_SHA.tar.gz -C $TARGET_DIR

  # copy 隐私配置文件
  # TODO:需要将隐私配置文件从 /var/lib/$PKG/config/ 移到 $TARGET_DIR/config/ 中
  # echo "copy 配置文件"
  # cp /var/lib/$PKG/config/core.js $TARGET_DIR/config/
  # cp /var/lib/$PKG/config/config.prod.js $TARGET_DIR/config/
  # cp /var/lib/$PKG/config/manager.js $TARGET_DIR/config/

  echo "打开目标目录"
  cd $TARGET_DIR
  cnpm install --production

  echo "启动项目"
  npm run pm2
else 'Verifying Error'
  exit 1
fi

遇到的问题

我们使用 shell 作为runner执行者,其实就是服务器当前的环境,所以下载 pm2 之类的依赖直接在服务器下载就好了,但是记住要切换角色,比如你当前登录服务器是你自己(whoami查询一下),要切到 gitlab-runner 角色(sudo su gitlab-runner),然后再安装pm2之类的才会生效。

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/114539724