React项目CI/CD打包

360 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Dockerfile.build

FROM node:16-alpine3.14
WORKDIR /usr/src/app
COPY ["package.json",".npmrc", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install
COPY . .
# RUN npx browserslist@latest --update-db
RUN npm run build
CMD ["node"]

Dockerfile

FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

.gitlab-ci.yml

variables:
  DOCKER_REGISTRY: xxxxx
  BRANCH: ${CI_COMMIT_REF_NAME}
  DOCKER_REPO_NAME: xxxxx

services:
  - docker:dind
stages:
  - build
  - pack

build:
  stage: build
  script:
    - docker build -t ${DOCKER_REPO_NAME}:${BRANCH}_build -f Dockerfile.build . 
    - docker create --name extract ${DOCKER_REPO_NAME}:${BRANCH}_build
    - docker cp extract:/usr/src/app/dist ./dist
    - docker rm -f extract
  artifacts:
    expire_in: 3 mins
    paths:
      - dist/
      - Dockerfile
  tags:
    - public-runner001

pack:
  stage: pack
  dependencies:
    - build
  script: 
    - docker login -u ${CI_USER} -p ${CI_PASSWD} $DOCKER_REGISTRY
    - docker build -t ${DOCKER_REPO_NAME}:${BRANCH} .
    - echo ${DOCKER_REPO_NAME}:${BRANCH}
    - docker push ${DOCKER_REPO_NAME}:${BRANCH}
  tags:
    - public-runner001