「这是我参与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那边(运维)😁
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使用参数化全局配置,看个人喜好了
配置完点击构建参数,会出现参数预览,此时更改其实不是更改默认值的,这个地方需要注意下。
看着很简单,但是 ARG BUILDVAR 这句代码只用我自己知道艰辛了😂
期间查询Dockerfile文件变量替换获取,花费了好多时间,需要去看docker相关文档,好在搞出来了,这个快乐还是很nice的。
结尾
整体来说,这块动态难度,还是属于怎么去拿到打包环境中的配置变量的问题
我这块去查询相关文档的时候,也走了好多弯路,目前算是能解决问题的一个方案了
抛砖引玉,有更好的方案,请赐教
有需要的,自己拿好了
谢谢~