美文网首页
Gitlab CI 之 Node.JS 优化一

Gitlab CI 之 Node.JS 优化一

作者: Goun | 来源:发表于2022-11-02 15:36 被阅读0次

    背景

    在小型Web应用开发过程中,开发人员并不会区分前端和后端,并且因为是简单的前后端分离,这样讲nginx和node js放在一个Pod下运行,也不用考虑,前后端更新不一致,导致网站异常。

    当我们将runner丢在K8s中去运行时,如果还采用docker命令,不断要去处理sock的映射,还要考虑CNI非docker的场景下的问题,这个时候,直接使用Google的kaniko是一个很好的选择。

    Dockerfile

    因为前后端都需要node编译,所以这里采用multi-stage

    ########################################################
    ############### INITIALIZE IMAGE  ###################
    ########################################################
    
    FROM node:16.18-buster-slim AS init
    WORKDIR /app
    
    RUN apt-get update && \
        apt-get install --no-install-recommends -y python3 make g++
    
    RUN mkdir -p /app/backend && \
        mkdir -p /app/frontend
    
    ADD src/ .
    ADD nginx nginx
    
    RUN cd /app/backend && \
        yarn && \
        yarn build && \
        yarn cache clean --all && \
        yarn install --production && \
        rm -rf src test && \
        cd /app/frontend && \
        yarn && \
        yarn build && \
        rm -rf src node_modules 
    
    ########################################################
    ############### NGINX IMAGE  ###################
    ########################################################
    
    FROM nginx:1.16.1-alpine AS nginx
    
    ENV TZ="Asia/Ho_Chi_Minh"
    
    RUN mkdir -p /etc/nginx/whitelisted_ip
    
    COPY --from=init /app/nginx/whitelist/* /etc/nginx/whitelisted_ip/
    COPY --from=init /app/nginx/conf/* /etc/nginx/conf.d/
    COPY --from=init /app/frontend/dist /var/www/frontend/dist
    
    ########################################################
    ############### BACKEND IMAGE  ###################
    ########################################################
    
    FROM node:16.18-buster-slim AS backend
    
    RUN mkdir -p /log
    
    COPY --from=init /app/backend /var/www/backend
    
    WORKDIR /var/www/backend
    

    使用一个基础的Image,Build出2个不同的业务Image

    CI

    before_script:
    - export EVENT_NAME="$(echo $CI_PROJECT_NAME | awk -F"." '{print tolower($1)}' )"
    - export IMAGE="test/${EVENT_NAME}"
    - export IMAGE_TAG=${CI_COMMIT_SHA:0:8}
    
    stages:
    - push
    
    push:image:
      image:
        entrypoint:
        - ''
        name: gcr.io/kaniko-project/executor:debug
      rules:
      - if: $CI_PIPELINE_SOURCE == "api"
      script:
      - /kaniko/executor 
        --context ${CI_PROJECT_DIR} 
        --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
        --destination ${IMAGE}-backend:${IMAGE_TAG}
        --target backend
      - /kaniko/executor 
        --context ${CI_PROJECT_DIR} 
        --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
        --destination ${IMAGE}-nginx:${IMAGE_TAG}
        --target nginx
      stage: push
      tags:
      - k8s-runner
    

    使用--target参数,来指定我们的目标

    相关文章

      网友评论

          本文标题:Gitlab CI 之 Node.JS 优化一

          本文链接:https://www.haomeiwen.com/subject/whretdtx.html