热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于kubernetes:聊聊如何将gitlab-ci的环境变量透传给k8s-deploymentyaml

最近敌人接了一个外包,这家外包公司用gitlab来做cicd,敌人之前自动化部署基本上都是利用jenkins,没接触过过gitlab的cicd,敌人他对技术也是比拟有谋求,他发现这家公司k8s的yaml文件,很多字段其实能够抽出来,配合cicd动静传入,而不是把那些字段间接写死在yaml文件,比方docker镜像。刚好我之前也玩过一阵子基于git

前言

最近敌人接了一个外包,这家外包公司用gitlab来做cicd,敌人之前自动化部署基本上都是利用jenkins,没接触过过gitlab的cicd,敌人他对技术也是比拟有谋求,他发现这家公司k8s的yaml文件,很多字段其实能够抽出来,配合cicd动静传入,而不是把那些字段间接写死在yaml文件,比方docker镜像。刚好我之前也玩过一阵子基于gitlab的cicd,他就问我有没有什么思路,于是就有了本篇的写文素材

前置常识

1、如何用gitlab来做cicd

能够查看官网链接,如下

https://docs.gitlab.com/ee/ci/README.html

2、envsubst命令理解

a、envsubst的作用

这个命令能够把环境变量传递给文件,并实现文件的变量替换,要替换的变量格局$ {var}或$ var

b、envsubst如何应用

  • 替换环境变量stdin输入到stdout:
echo '{{$HOME}}' | envsubst
  • 将输出文件中的环境变量替换为stdout:
envsubst <{{path/to/input_file}}
  • 将输出文件中的环境变量替换为文件,并将其输入到文件中:

    envsubst <{{path/to/input_file}} > {{path/to/output_file}}
  • 用空格分隔的列表,替换输出文件中的环境变量:
envsubst '{{$USER $SHELL $HOME}}' <{{path/to/input_file}}

上述命令内容来自如下博文,因为命令没有几行,我就也贴了上来

https://blog.csdn.net/oopxiajun2011/article/details/111668011

注: 在mac上,须要装置gettext,能力应用envsubst

c、如何利用envsubst替换k8s deployment.yaml

假如deployment.yaml有个镜像内容形如下

image: $DEPLOY_PROCJECT_IMAGE

咱们能够执行如下命令

 envsubst 

这行命令的意思就是读取deployment.yml,并通过envsubst 把deployment.yml中的$DEPLOY_PROCJECT_IMAGE替换成相应的环境变量,并通过管道,把deployment.yml的内容传递给kubectl

如何将gitlab ci的环境变量透传给k8s deployment.yaml

示例:

注: 敌人的公司采纳业务服务和部署服务.gitlab-ci.yml隔离,业务服务.gitlab-ci.yml通过触发部署服务的触发器进行部署,示例只列和本文相干的内容,其余配置信息做了清理

1、业务服务的.gitlab-ci.yml配置如下

variables:
  REGISTRY: xxx.docker.com
  PROJECTNAME: hello-demo
  IMAGE: demo/hello-demo
  DEPLOY_VERSION: $CI_COMMIT_TIMESTAMP


stages:
  - triggerDeploy


triggerDeployK8S:
  stage: triggerDeploy
  image: $REGISTRY/devops/busyboxplus:curl
  script:
    - curl -X POST -F token=fc4754200aa027baedf97cf7d45a02 -F ref=master -F "variables[DEPLOY_PROJECT_NAME]=$PROJECTNAME" -F "variables[DEPLOY_PROCJECT_IMAGE]=$REGISTRY/$IMAGE:dev" -F "variables[DEPLOY_VERSION]=$DEPLOY_VERSION" http://xxx.gitlab.com/api/v4/projects/32/trigger/pipeline
  only:
    - dev
  tags:
    - dev

其中

variables[DEPLOY_PROCJECT_IMAGE]=$REGISTRY/$IMAGE:dev

就是环境变量

2、部署服务的.gitlab-ci.yml配置如下

stages:
  - deploy
deploy:
  stage: deploy
  script:
    - echo $DEPLOY_PROJECT_NAME
    - echo $DEPLOY_PROCJECT_IMAGE
    - echo $DEPLOY_VERSION
    - cd ${DEPLOY_PROJECT_NAME}
    - envsubst 

3、deployment.yml示例

apiVersion: v1
kind: Service
metadata:
  namespace: dev
  name: hello-demo
spec:
  selector:
    app: hello-demo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 30011
  type: NodePort
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: dev
  name: hello-demo
  labels:
    app: hello-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-demo
  template:
    metadata:
      labels:
        app: hello-demo
    spec:
      imagePullSecrets:
      - name: default-secret
      containers:
      - name: hello-demo
        image: $DEPLOY_PROCJECT_IMAGE
        imagePullPolicy: Always
        ports:
         - containerPort: 8080
        env:
            # k8s滚动更新pod,是依据deployment.yml的变动来更新,如果代码更新了,然而deployment.yml内容没更新,k8s会认为
            #pod没有产生变动,因而就不会进行滚动降级。DEPLOY_VERSION是用来做每次部署动静更新deployment.yml内容
          - name: DEPLOY_VERSION
            value: "$DEPLOY_VERSION"
          

总结

貌似也没啥内容总结,就贴个gitlab ci内置的variables文档作为总结吧,文档内容如下

https://docs.gitlab.com/ce/ci/variables/predefined_variables.html


推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
author-avatar
mobiledu2502861997
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有