使用gitlab的ci/cd自动将应用部署到rancher中

使用gitlab的ci/cd自动将应用部署到rancher中

  • 本文主要介绍如何使用gitlab的ci/cd自动发布应用到rancher
    • rancher 2.0的安装,[请参考官方文档](https://rancher.com/docs/rancher/v2.x/en/)
      • 获取rancher集群下某个项目的id
      • 创建一个key用于登录到rancher集群中
      • 获取rancher里面集群的地址
    • Gitlab 的runner的安装,请自行解决
    • 下面讲述两种方式部署,任选一种即可
      • 前置说明
      • 1. 使用rancher下载下来的deployment.yaml文件部署
        • 从rancher中下载指定项目的deployment.yaml文件, 命名为deployment.yaml
      • .gitlab.ci.yml文件
      • 2. 直接替换已部署服务的镜像
        • 编写.gitlab-ci.yml
  • 转载请标注转载出处为:https://blog.csdn.net/qq_28700667/article/details/93080907

本文主要介绍如何使用gitlab的ci/cd自动发布应用到rancher

rancher 2.0的安装,请参考官方文档

本文中使用的rancher版本必须是2.0以上, 需要获取集群下某个项目的id, 用户的token,集群的地址三个参数。

获取rancher集群下某个项目的id

使用gitlab的ci/cd自动将应用部署到rancher中_第1张图片

创建一个key用于登录到rancher集群中

使用gitlab的ci/cd自动将应用部署到rancher中_第2张图片
使用gitlab的ci/cd自动将应用部署到rancher中_第3张图片

获取rancher里面集群的地址

使用gitlab的ci/cd自动将应用部署到rancher中_第4张图片

Gitlab 的runner的安装,请自行解决

下面讲述两种方式部署,任选一种即可

前置说明

本文介绍的应用项目均为java应用,使用maven作为依赖管理,构建镜像使用的是com.google.cloud.tools插件通过maven命令自动构建镜像到远程镜像仓库,
pom.xml文件的jib-maven-plugin插件配置


  com.google.cloud.tools
    jib-maven-plugin
    1.0.1
    
        
            来源镜像,基于哪个镜像打包,比如JDK8
        
        
        	
            127.0.0.1:4000/demo/demo:${image_tag}
            
            	
                ${registry_username}
                ${registry_password}
            
        
        true
        
            
                -Djava.security.edg=file:/dev/./urandom
            
        
    

1. 使用rancher下载下来的deployment.yaml文件部署

此方式当服务不存在的时候会创建一个新的服务,服务的配置均从.yaml部署文件中配置,每次ci/cd的时候都是重新部署,方便在其他集群快速部署,不方便的地方是在rancher里修改了配置还要同步修改代码里面的配置文件

从rancher中下载指定项目的deployment.yaml文件, 命名为deployment.yaml

使用gitlab的ci/cd自动将应用部署到rancher中_第5张图片
修改下载后的文件内容,更改其中的image:为上述pom.xml里面配置的image的参数 127.0.0.1:4000/demo/demo:${image_tag}
使用gitlab的ci/cd自动将应用部署到rancher中_第6张图片
将此文件拷贝至项目和.gitlab-ci.yml文件同一目录

.gitlab.ci.yml文件

image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.8.0

variables:
    MAVEN_OPTS: -Dmaven.repo.local=/cache
stages:
    - build
    - deploy

build:
    stage: build
    script:
        - build_image

deploy:
    stage: deploy
    image: jonaskello/rancher-cli-k8s:v2.0.4
    script:
        - deploy_image


.auto_devops: &auto_devops |

    function build_image(){
        mvn compile jib:build \
        -Dimage_tag=$CI_PIPELINE_ID  \
        -Dregistry_username=docker私库的用户名 \
        -Dregistry_password=docker私库的密码
    }

    function deploy_image(){
        echo yes | rancher login rancher集群的地址 -t rancher的token --context 集群项目的id
        sed -i 's^${image_tag}^'"$CI_PIPELINE_ID^g" "./deployment.yaml"
        rancher kubectl --namespace=项目在rancher的命名空间 apply -f ./deployment.yaml
    }

before_script:
    - *auto_devops

里面的参数均在上面获取到了,其中deployment.yaml为上述从rancher下载的文件。

2. 直接替换已部署服务的镜像

此方式自动构建的前提是rancher中必须存在对应的服务,然后通过kubectl命令直接替换镜像,优点是可以在rancher中配置每个服务的具体信息,每次都是更换镜像名称,缺点是,服务必须先在rancher中创建好。

编写.gitlab-ci.yml

image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.8.0

variables:
    MAVEN_OPTS: -Dmaven.repo.local=/cache
stages:
    - build
    - deploy

build:
    stage: build
    script:
        - build_image

deploy:
    stage: deploy
    image: jonaskello/rancher-cli-k8s:v2.0.4
    script:
        - deploy_image


.auto_devops: &auto_devops |

    function build_image(){
        mvn compile jib:build \
        -Dimage_tag=$CI_PIPELINE_ID  \
        -Dregistry_username=docker私库的用户名 \
        -Dregistry_password=docker私库的密码
    }

    function deploy_image(){
        echo yes | rancher login rancher集群的地址 -t rancher的token --context 集群项目的id
        rancher kubectl set image deployment/rancher中的服务名 *=127.0.0.1:4000/demo/demo:$CI_PIPELINE_ID --all
    }

before_script:
    - *auto_devops

里面的参数均在上面获取到了,原理就是动态的替换服务的镜像

转载请标注转载出处为:https://blog.csdn.net/qq_28700667/article/details/93080907

你可能感兴趣的:(rancher)