您的位置:首页 > 其它

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

2020-02-29 19:22 411 查看

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

  • Gitlab 的runner的安装,请自行解决
  • 下面讲述两种方式部署,任选一种即可
  • .gitlab.ci.yml文件
  • 2. 直接替换已部署服务的镜像
  • 转载请标注转载出处为:https://blog.csdn.net/qq_28700667/article/details/93080907
  • 本文主要介绍如何使用gitlab的ci/cd自动发布应用到rancher

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

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

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

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


    获取rancher里面集群的地址

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

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

    前置说明

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

    <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>1.0.1</version>
    <configuration>
    <from>
    <image>来源镜像,基于哪个镜像打包,比如JDK8</image>
    </from>
    <to>
    <!-- 构建的镜像名称含私有仓库的地址,后续需要这个镜像名称,一般tag建议使用gitlab的CI_PIPELINE_ID作为镜像的tag,方便后续的处理 -->
    <image>127.0.0.1:4000/demo/demo:${image_tag}</image>
    <auth>
    <!-- 私有镜像仓库的用户名和密码 -->
    <username>${registry_username}</username>
    <password>${registry_password}</password>
    </auth>
    </to>
    <allowInsecureRegistries>true</allowInsecureRegistries>
    <container>
    <jvmFlags>
    <jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
    </jvmFlags>
    </container>
    </configuration>
    </plugin>

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

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

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


    修改下载后的文件内容,更改其中的image:为上述pom.xml里面配置的image的参数 127.0.0.1:4000/demo/demo:${image_tag}

    将此文件拷贝至项目和.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

    • 点赞 2
    • 收藏
    • 分享
    • 文章举报
    天悬星云 发布了1 篇原创文章 · 获赞 2 · 访问量 588 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: