zoukankan      html  css  js  c++  java
  • GitLab集成kubernetes实现自动发布

     创建GitLab源码项目并上传示例代码

    1. 创建GitLab源码项目

      本示例中创建的GitLab源码项目地址为:https://gitee.com/SunHarvey/helloworld_java.git 

    2. 执行以下命令获取示例代码并上传至GitLab

    git clone https://gitee.com/SunHarvey/helloworld_java.git
    git remote add helloworld https://gitee.com/SunHarvey/helloworld_java.git
    git push helloworld master

    在Kubernetes集群中安装GitLab Runner

    1. 获取GitLab Runner的注册信息

    • 登录你的GitLab
    • 在顶部导航栏中,选择Projects > Your projects。
    • Your projects页签下,选择相应的Project。
    • 在左侧导航栏中,选择Settings > CI / CD。
    • 单击Runners右侧的Expand。

     获取URL和registration token, 这个url 和token下边要用到

     2. 获取并修改GitLab Runner的Helm Chart

    获取gitlab-runner

    git clone https://github.com/haoshuwei/gitlab-runner.git

    替换values.yaml文件中 gitlabUrl和runnerRegistrationToken字段, 就是上边看到的那个两个字段,

    也可以配置全局的runner, 这个就不用每个项目都加了,具体方法请看文章末尾附录

    gitlabUrl: http://xx.xx.xx.xx/
    runnerRegistrationToken: "xxxxxx"

    3 安装GitLab Runner

    打包应用

    helm package .

    Successfully packaged chart and saved it to: /root/gitlab/gitlab-runner/gitlab-runner-0.1.37.tgz

    安装应用

    helm install --namespace gitlab --name  gitlab-runner *.tgz

    查看相关的deployment/pod是否成功启动。若成功启动,则可在GitLab上看到注册成功的GitLab Runner

     也可在kubernetes上查看

     转载请在文章开头附上原文链接地址 : https://www.cnblogs.com/Sunzz/p/13716477.html

    设置全局变量

    在GitLab的顶部导航栏中,选择Projects > Your projects。
    在Your projects页签下,选择相应的Project。
    在左侧导航栏中,选择Settings > CI / CD。
    单击Variables右侧的Expand。添加GitLab Runner可用的环境变量。本示例中,添加以下三个变量。

    REGISTRY_USERNAME:镜像仓库用户名。
    REGISTRY_PASSWORD:镜像仓库密码。
    kube_config:KubeConfig的编码字符串。

    执行以下命令生成KubeConfig的编码字符串:

    echo $(cat ~/.kube/config | base64) | tr -d " "

    编写.gitlab-ci.yml

    编写.gitlab-ci.yml文件,完成 helloworld 源码项目的编译构建、镜像推送和应用部署(可参考hellowrld源码项目中的.gitlab-ci.yml)

    image: docker:stable
    stages:
      - package
      - docker_build
      - deploy_k8s
    variables:
      KUBECONFIG: /etc/deploy/config
      MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
    mvn_build_job:
      image: maven:3.6.2-jdk-14
      stage: package
      tags:
        - k8s-runner
      script:
        - mvn clean install
        - cp target/helloworld-1.0.jar /opt/cache/
    docker_build_job:
      image: docker:latest
      stage: docker_build
      tags:
        - k8s-runner
      script:
        - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com
        - cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
        - docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .
        - docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID
    
    deploy_k8s_job:
      image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
      stage: deploy_k8s
      tags:
        - k8s-runner
      script:
        - mkdir -p /etc/deploy
        - echo $kube_config |base64 -d > $KUBECONFIG
        - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml
        - cat deployment.yaml
        - kubectl apply -f deployment.yaml

    .gitlab-ci.yml定义了一个Pipeline, 分三个阶段步骤执行

    image: docker:stable     # Pipeline中各个步骤阶段的构建镜像没有指定时, 默认使用docker:stable镜像
    stages:
      - package              # 源码打包阶段
      - docker_build         # 镜像构建和打包推送阶段
      - deploy_k8s           # 应用部署阶段
    variables:
      KUBECONFIG: /etc/deploy/config   # 定义全局变量KUBECONFIG

    maven源码打包阶段。

    mvn_build_job:               # job名称
      image: maven:3.6.2-jdk-14  # 本阶段构建使用的构建镜像
      stage: package             # 关联的阶段名称
      tags:                      # GitLab Runner的tag
        - k8s-runner             # 指定runner-tag
      script:
        - mvn clean install      # 执行构建脚本
        - cp target/helloworld-1.0.jar /opt/cache/   # 构建物保存至缓存区

    镜像构建和打包推送阶段

    docker_build_job:
      image: docker:latest
      stage: docker_build
      tags:
        - k8s-runner
      script:
        - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com     # 登录镜像仓库
        - cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
        - docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .   # 打包Docker镜像,使用的tag为本次Pipeline的ID
        - docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID         # 推送Docker镜像

    应用部署阶段

    deploy_k8s_job:      # job名称
      image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6  # 本阶段构建使用的构建镜像
      stage: deploy_k8s  # 关联的阶段名称
      tags:
        - k8s-runner     # GitLab Runner的tag
      script:
        - mkdir -p /etc/deploy
        - echo $kube_config |base64 -d > $KUBECONFIG                # 配置连接Kubernetes集群的config文件
        - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml    # 动态替换部署文件中的镜像tag
        - cat deployment.yaml
        - kubectl apply -f deployment.yaml

    执行Pipeline

    提交.gitlab-ci.yml文件后,Project gitlab-java-demo会自动检测到这个文件并执行Pipeline, 如下图所示

    访问服务

    如果部署文件中没有指定Namespace,则默认会部署到GitLab命名空间下
    kubectl -n gitlab get svc

    注意事项

    1. 取消Auto DevOps

     附录:

     全局runner 添加

    以管理员省份登录gitlab ,进入adminArea --> Overview --> Runners, 就可以看到 url 和token 了。

     文本参考:https://help.aliyun.com/document_detail/106968.html

  • 相关阅读:
    Nginx 性能优化有这篇就够了!
    Zabbix Web API Get方法整合
    MySQL利用binlog恢复误操作数据(python脚本)
    Tomcat7 1000并发量配置以及配置优化
    MySQL中 如何查询表名中包含某字段的表
    python异步编程之asyncio(百万并发)
    微信支付开发(7) 刷卡支付
    <Android 基础(二十)> CoordinatorLayout Behavior
    实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
    我和滴滴打车司机的那些事
  • 原文地址:https://www.cnblogs.com/Sunzz/p/13716477.html
Copyright © 2011-2022 走看看