第五章 九析带你玩转 rancher - 流水线发布
admin
2023-03-26 07:41:25
0次

本系列文章:


第一章:九析带你玩转 rancher - 安装篇

第二章:九析带你玩转 rancher - 导入集群篇

第三章:九析带你玩转 rancher - 集成 gitlab

第四章:九析带你玩转 rancher - 集成 harbor

第五章:九析带你玩转 rancher - 流水线发布

目录

1 前言

2 设置流水线

    2.1 关联代码库

        2.1.1 指定项目空间

        2.1.2 设置代码库

    2.2 关联镜像库

    2.3 全局流水线设置

    2.4 项目空间流水线设置

3 执行流水线

4 流水线成功执行


1 前言

        本文是在上章《九析带你玩转 rancher - 集成 gitlab》的基础上进行配置的,所以在发布 rancher 流水线前,需确保 rancher 和 gitlab 已经关联。

流水线是 DevOps 的实现,它提供非常友好的界面 UI,使开发人员仅仅通过鼠标,就可以完成整个微服务的发布上线。在 rancher 中,一个微服务就对应一条流水线。


2 设置流水线

        设置流水线需同时设置全局流水线和项目流水线。全局流水线的设置会影响到项目流水线。

2.1 关联代码库

2.1.1 指定项目空间

        本文 default 项目空间下配置流水线:

第五章 九析带你玩转 rancher - 流水线发布

        在 default 项目空间下,选择“资源” -> “流水线” 菜单:

第五章 九析带你玩转 rancher - 流水线发布

2.1.2 设置代码库

        选择“设置代码库”按钮:

第五章 九析带你玩转 rancher - 流水线发布

        选择“刷新代码库”按钮:

第五章 九析带你玩转 rancher - 流水线发布

        由于 gitlab 已经跟 rancher 关联,故刷新代码库之后,就会显示你在 gitlab 中的服务代码:

第五章 九析带你玩转 rancher - 流水线发布

        启用服务:

第五章 九析带你玩转 rancher - 流水线发布

        点击完成:

第五章 九析带你玩转 rancher - 流水线发布

2.2 关联镜像库

        本文在 default 空间下关联镜像库:

第五章 九析带你玩转 rancher - 流水线发布

        添加凭证:

第五章 九析带你玩转 rancher - 流水线发布

        填写相关信息:

第五章 九析带你玩转 rancher - 流水线发布

2.3 全局流水线设置

        选择指定集群(zcy-arch-k8s),再选择“工具”,最后选择“流水线”:

第五章 九析带你玩转 rancher - 流水线发布

        修改内容如下:

第五章 九析带你玩转 rancher - 流水线发布

        全局流水线会控制项目流水线的并发个数、资源占比情况等。

2.4 项目空间流水线设置

        项目空间流水线需同时选中“集群”(zcy-arch-k8s)和“项目空间”(default):

第五章 九析带你玩转 rancher - 流水线发布

        选择 “编辑配置” 子菜单:

第五章 九析带你玩转 rancher - 流水线发布         点击 “设置流水线” 链接后的图示如下:

第五章 九析带你玩转 rancher - 流水线发布        可根据各自需求添加流水线“阶段”,一般情况下,整个流水线跑四个阶段就足够了,即:

1 clone 阶段:这是系统默认的必须阶段,指从代码库下载微服务的源代码。

2 build 阶段:编译源代码,并生成 Dockerfile 文件

3 publish 阶段:根据上阶段的 Dockerfile 文件生成镜像,然后将镜像上传到指定镜像仓库

4 deploy 阶段:从镜像仓库下载上阶段生成的服务镜像,然后启动容器运行

        下面以 java 语言为例,在服务(这里是: chapter-001-helloworld)代码库创建 rancher 总流水线文件 .rancher-pipeline.yml,如下图所示:

第五章 九析带你玩转 rancher - 流水线发布

        文件定义了流水线 3 个阶段,文件内容如下:

stages:

- name: Build

 steps:

 - runScriptConfig:

     image: jiuxi.harbor.org/stable/maven-3.6.0-jdk-8

     shellScript: mvn -B -U -DskipTests clean package spring-boot:repackage

- name: Publish

 steps:

 - publishImageConfig:

     dockerfilePath: ./Dockerfile

     buildContext: .

     tag: stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

     pushRemote: true

     registry: jiuxi.harbor.org

   env:

     PLUGIN_DEBUG: "true"

     PLUGIN_INSECURE: "true"

- name: Deploy

 steps:

 - applyYamlConfig:

     path: ./Deployment.yaml

notification: {}

        Publish 阶段是把 Build 阶段生成的 jar 文件,根据预先定义的 Dockerfile 文件做成服务镜像,并推送到私有镜像仓库中,其中自定义 Dockerfile 文件定义如下:

FROM jiuxi.harbor.org/stable/java:8

MAINTAINER "jiuxi"<1494445739@qq.com>

ADD ./target/application.jar application.jar

EXPOSE 8080

CMD ["/bin/sh", "-c", "java -jar application.jar"]

        Deploy 阶段是在 k8s 中执行自定义部署文件 Deployment.yaml,创建服务的 service 和 deployment 资源,并运行容器,自定义 Deployment.yaml 文件内容如下:

apiVersion: v1

kind: Service

metadata:

 name: ${CICD_GIT_REPO_NAME}

 labels:

   app: ${CICD_GIT_REPO_NAME}

spec:

 type: ClusterIP

 selector:

   app: ${CICD_GIT_REPO_NAME}

 ports:

 - port: 8080

   targetPort: 8080

---

apiVersion: apps/v1

kind: Deployment

metadata:

 name: ${CICD_GIT_REPO_NAME}

spec:

 replicas: 1

 selector:

   matchLabels:

     app: ${CICD_GIT_REPO_NAME}

 minReadySeconds: 5

 strategy:

   type: RollingUpdate

 template:

   metadata:

     labels:

       app: ${CICD_GIT_REPO_NAME}

   spec:

     containers:

     - name: ${CICD_GIT_REPO_NAME}

       image: jiuxi.harbor.org/stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

       livenessProbe:

         tcpSocket:

           port: 8080

       imagePullPolicy: Always

       env:

       - name: TZ

         value: "Asia/Shanghai"

       - name: MY_POD_IP

         valueFrom:

           fieldRef:

             fieldPath: status.podIP

       - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-stdout

         value: "stdout"

       - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-logs

         value: "/data/logs/${CICD_GIT_REPO_NAME}/*.log"

       volumeMounts:

       - name: logs

         mountPath: /data/logs/${CICD_GIT_REPO_NAME}

       - name: time

         mountPath: /etc/localtime

       resources:

         limits:

           memory: 1Gi

     volumes:

     - name: time

       hostPath:

         path: /etc/localtime

     - name: logs

       emptyDir: {}

     restartPolicy: Always

        提交 .rancher-pipeline.yaml、Deployment.yaml、Dockerfile 文件到 gitlab。然后在 rancher 中重新点击“设置代码库”:

第五章 九析带你玩转 rancher - 流水线发布

      “刷新代码库”,点击“完成”:

第五章 九析带你玩转 rancher - 流水线发布

        再点击“编辑配置”:

第五章 九析带你玩转 rancher - 流水线发布

        流水线已经自动配置好:

第五章 九析带你玩转 rancher - 流水线发布

        确定一下 Publish 阶段的镜像仓库地址是否正确:

第五章 九析带你玩转 rancher - 流水线发布

        点击“完成”按钮:

第五章 九析带你玩转 rancher - 流水线发布

        点击确认,整个流水线的配置已经完成。


3 执行流水线

        选择“运行”菜单来执行流水线:

第五章 九析带你玩转 rancher - 流水线发布

        选择指定代码分支,我这里是“master”:

第五章 九析带你玩转 rancher - 流水线发布

        点击“运行”:第五章 九析带你玩转 rancher - 流水线发布

        流水线开始执行,首次启动流水线时,需下载 jenkins、minio、docker-registry 等镜像,因此需要一定时间。如果执行报如下错:第五章 九析带你玩转 rancher - 流水线发布

        说明 pipeline 运行容器并不识别自定义域名,你需要重启流水线。第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        启动后,jenkins 会动态生成 pipeline 容器,此时你需要趁着 pipeline 容器生成瞬间进入它的控制台(所以你最好同时打开 2 个 rancher 页面,一个是流水线执行页面,如上图;另外一个是 default 项目空间页面,如下图):第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        要注意,jenkins 在生成 pipeline 容器的时候,页面会自动刷新(所以你不用手动刷新页面);其次,你要确保流水线前面的状态是 Running 时,操作后面的“更多”按钮才可以显示“执行命令行”菜单:第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        在弹出的“执行命令行”界面输入下面命令修改 /etc/hosts 文件:

echo "10.110.101.100 jiuxi.gitlab.com jiuxi.harbor.org jiuxi.nexus.org" >> /etc/hosts


4 流水线成功执行第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布         在 default 项目空间下查看服务:第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        发现 chapter-001-helloworld 已经成功运行:第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        点击进入 chapter-001-helloworld 查看 pod 日志:第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        发现服务已经正常运行:第五章 九析带你玩转 rancher - 流水线发布

第五章 九析带你玩转 rancher - 流水线发布        自此,轻松完爆 rancher 流水线发布。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...