Jenkins+Docker部署配置项实现动态化

468 阅读3分钟

1_Z0kYtXLNEFuXjnu6JyrsCg.png

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

介绍


本篇主要介绍如何将自动化部署的项目配置项进行动态化。

如何将vue或者react项目进行自动化部署,本站已经有大量文章介绍,这边就不多做阐述了。

所以本文受众是已有部署经验的小伙伴,算是一个小进阶,有需要的自取。

为什么


为什么需要将配置项进行动态化,主要是我的项目需要分多个部署环境。

测试环境是直接在当前服务器打包镜像并启动容器,ip加端口访问就行。

其他环境都是推送到阿里云容器服务(k8s)进行部署。

在之前都是通过不同分支,来更改对应的Dockerfile与docker-compose.yml文件配置。

但是有些环境代码是一样的,只是打包命令不同,根据环境变量更改相关配置即可。

所以开发人员还得来回改动部署文件的相关配置,这个不能忍。

相关代码


Dockerfile

version: "3.7"
services:
  web:
    image: ${TAG}-img
    container_name: ${TAG}
    build: .
    restart: always
    networks:
      - test-network
    ports:
      - ${PORT}:80
networks:
  test-network:
    external: true

docker-compose.yml

# build stage
FROM node:lts-alpine as build-stage
ARG BUILDVAR
WORKDIR /www
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run ${BUILDVAR}

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /www/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

这是最终改动完的配置文件。

那这些动态变量在哪配置呢?

交给了jenkins那边(运维)😁

image.png

export TAG=name-test PORT=8888 (新年大家发发发)
docker-compose build --no-cache --build-arg BUILDVAR=test
docker-compose -p ${TAG} up -d

tip

这里面的变量名都可以自定义 不是非得我这个 我只是偷懒

TAG 对应多处变量(偷个懒) 可以再细化

BUILDVAR 对应不同环境打包命令

--no-cache 不适用缓存构建镜像 可不加

这时候,开发者已经不需要关心部署项目相关配置了,其实就是换个人换个地方去配置。

但是这块还是需要与运维人员沟通,不然被X可不好。

export TAG=name-test PORT=8888

这句代码其实也可以在jenkins使用参数化全局配置,看个人喜好了

配置完点击构建参数,会出现参数预览,此时更改其实不是更改默认值的,这个地方需要注意下。

image.png

看着很简单,但是 ARG BUILDVAR 这句代码只用我自己知道艰辛了😂

期间查询Dockerfile文件变量替换获取,花费了好多时间,需要去看docker相关文档,好在搞出来了,这个快乐还是很nice的。

结尾


整体来说,这块动态难度,还是属于怎么去拿到打包环境中的配置变量的问题

我这块去查询相关文档的时候,也走了好多弯路,目前算是能解决问题的一个方案了

抛砖引玉,有更好的方案,请赐教

有需要的,自己拿好了

谢谢~