项目A部署用的是K8S,Helm模版(K8S的对象文件管理工具,包括yaml)。
1.在helm的template目录下新建configMap.yaml,
kind: ConfigMap
apiVersion: v1
metadata:
name: configMap-name-jack
data:
#类属性键;每一个键都映射到一个简单的值
player_initial_lives: "3"
ui_properties_file_name: "user-interface.properties"
# 类文件键
game.properties: |
enemy.types=aliens,monsters
player.maximum-lives=5
2.然后在deployment.yaml中引用configMap配置,在kind为Deployment/Pod中,sepc: -> containers: 节点下, 添加节点配置:
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: demo
image: alpine
command: ["sleep", "3600"]
env:
# 定义环境变量
- name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的,这个是环境变量名称,可以再shell script中用$PLAYER_INITIAL_LIVES获取,然后输出、
valueFrom:
configMapKeyRef:
name: configMap-name-jack # 这个值来自 ConfigMap
key: player_initial_lives # 需要取值的键
- name: UI_PROPERTIES_FILE_NAME
valueFrom:
configMapKeyRef:
name: configMap-name-jack
key: ui_properties_file_name
- name: TEST-SINGLE-ENV #这种是直接在yaml配置文件配置环境变量和值,不单独卸载configmap.yaml文件中,shell script中用$TEST-SINGLE-ENV获取,然后输出、
value: "true"
volumeMounts:
- name: config
mountPath: "/config"
readOnly: true
volumes:
# 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
- name: config
configMap:
# 提供你想要挂载的 ConfigMap 的名字
name: configMap-name-jack
# 来自 ConfigMap 的一组键,将被创建为文件
items:
- key: "game.properties"
path: "game.properties"
3.在jenkins部署项目时,使用Dockerfile文件,Dockerfile中,可以做很多事情,例如我将我需要执行一些逻辑的shell script脚本,叫做script-A.sh ,
RESULT_VALUE=$TEST-SINGLE-ENV
echo "RESULT_VALUE="$RESULT_VALUE
if [ $RESULT_VALUE == true ]; then
//做一下逻辑处理,例如是切换到项目路径下,对一些文件的预处理,动态处理
else
// todo
fi
4.在Dockerfile文件中,添加将script-A.sh复制到k8s pod目录中,
...... 前面的dockerfile命令
WORKDIR /usr/dev/project-A
COPY ./script-A.sh /usr/dev/project-A
RUN chmod +x script-A.sh #赋予执行权限
CMD ["sh", "-c", "sh script-A.sh && nginx -g 'daemon off;'"]
#先执行脚本,然后启动nginx
5.这样,在部署完之后,将执行到script-A.sh中编写的逻辑处理,可以做一些对当前部署项目的js,css等文件的处理,达到需求的效果,结合k8S中configMap的使用,动态的去处理需求。