Skip to content

一个用 Go 编写的命令行工具,用以构建,打包并部署 Docker 镜像到 k8s 环境

License

Notifications You must be signed in to change notification settings

yankeguo-deprecated/deployer

Repository files navigation

deployer

BMC Donate

一个用 Go 编写的命令行工具,用以构建,打包并部署 Docker 镜像到 k8s 环境

获取镜像

一般情况下不会使用 Docker 镜像来获取此可执行文件

guoyk/deployer

前置条件

  • docker 已安装
  • kubectl 已安装

使用方法

假设集群名为 test-cluster, 命名空间名字为 test-namespace, 工作负责名为 test-deployment, 环境名为 test

  1. deployer 放置在可被 Jenkins 调用的位置

  2. 准备 test-cluster.yml 文件, 放置为 $HOME/.deployer/preset-test-cluster.yml, Jenkins 默认 $HOME/var/lib/jenkins

    文件内容如下

    registry: 127.0.0.1:5000 #所使用的的镜像仓库基地址
    imagePullSecrets: 
      - test_secret #k8s集群拉取镜像所需的密文名称
    kubeconfig: # kubeconfig 文件内容, 用于部署镜像
      # ...
    dockerconfig: # dockerconfig 文件内容, 用于推送镜像, 参考 $HOME/.docker/config.json
      auth:
        registry.example.com:
          auth: "xxxxxxx"
      # ...
  3. 准备 deployer.yml 文件, 放置到项目根目录

    文件内容如下

    default:
      build: # 构建 Bash 脚本, 数组形式
        - echo default
      package: # Dockerfile 打包脚本, 数组形式
        - FROM nginx
        - ADD index.html /usr/share/nginx/html/index.html
    test: # 可以针对不同环境, 覆盖默认的 build 和 package
      build:
        - echo test
  4. Jenkins 脚本内容

deployer --cluster test-cluster --namespace test-namespace --deployment test-deployment --env test

将任务名设置为 test-deployment.test 来省略 --deployment test-deployment --env test 两个选项

将任务名设置为 test-cluster.test-namespace.test-deployment.test 来省略所有选项

其他选项:

Usage of deployer:
-cluster string
  	集群, 决定使用哪个集群配置文件, 使用 $HOME/.deployer/preset-[CLUSTER].yml
-container string
  	容器名称,  默认和 deployment 相同(基于 rancher 习惯)
-cpu string
  	CPU 资源配置, 格式 '[申请]:[限额]', 如 50:250, 单位 'm' 千分之一核心
-deployment string
  	工作负载, 要求和 Kubernetes 上的工作负载名称完全一致(已废弃,使用 -workload)
-env string
  	环境名, 决定 deployer.yml 或者 docker-build.XXX.sh,  Dockerfile.XXX 文件的选择, 和构建后的镜像标签
-image string
  	镜像基础名称, 默认为 '[命名空间]-[工作负载]'
-init
  	容器为 init 类型的容器
-keep-generated
  	保存生成的中间文件, 用于调试
-keep-image
  	在本地 Docker 保留镜像, 便于重复构建, 或者调试
-limits-cpu string
  	CPU 资源限制, 单位必须为 'm', 千分之一核心(废弃, 使用 --cpu 参数)
-limits-mem string
  	MEM 资源限制, 单位必须为 'Mi', 兆字节(废弃, 使用 --mem 参数)
-mem string
  	内存资源配置, 格式 '[申请]:[限额]', 如 64:256, 单位 'Mi' 兆字节
-namespace string
  	命名空间, 工作负载在集群中的命名空间
-only-build
  	只执行 build 步骤, 不进行 package, push, deploy 步骤
-only-deploy
  	只执行 deploy 步骤, 不进行 build, package, push 步骤
-registry string
  	镜像仓库, 指定镜像要推往的仓库地址
-requests-cpu string
  	CPU 资源请求, 单位必须为 'm', 千分之一核心(废弃, 使用 --cpu 参数)
-requests-mem string
  	MEM 资源请求, 单位必须为 'Mi', 兆字节(废弃, 使用 --mem 参数)
-skip-deploy
  	只执行 build, package, push 步骤, 不进行 deploy 步骤
-workload string
  	工作负载名
-workload-type string
  	工作负载类型,默认为 deployment (default "deployment")

deployer.yml

本质上是一个将 构建脚本 (build, 即 bash 脚本) 和 打包脚本 (package, 即 Dockerfile 文件) 合并到一起的 YAML 文件, 如下所示

default:
  build:
    - mvn -Pdev -DskipTests=true clean package
  package:
    - FROM common-jre8
    - WORKDIR /app
    - ADD target/web.jar /app/web.jar
    - CMD ["java", "-jar", "web.jar"]

可以为不同环境指定不同的 构建脚本 和 打包脚本, 如果没有指定, 则是用默认脚本, 如下所示

default:
  package:
    - FROM common-jre8
    - WORKDIR /app
    - ADD target/web.jar /app/web.jar
    - CMD ["java", "-jar", "web.jar"]

dev:
  build:
    - mvn -Pdev -DskipTests=true clean package
test:
  build:
    - mvn -Ptest -DskipTests=true clean package

该文件为 devtest 指定了不同的 构建脚本, 但是他们共享同一个 打包脚本

许可证

Guo Y.K., MIT License

About

一个用 Go 编写的命令行工具,用以构建,打包并部署 Docker 镜像到 k8s 环境

Resources

License

Stars

Watchers

Forks

Packages

No packages published