一、基础准备

Rancher UI操作:

  1. 在rancherUI创建项目
  2. 创建命名空间
  3. 设置镜像库凭证

二、 对接GitLab


Rancher UI操作:

  1. 从全局页面导航到需要配置流水线的项目。
  2. 从导航栏选择工具> 流水线。
  3. 按照 UI 界面的的提示,配置 GitLab 应用。Rancher 会打开 GitLab 网页。
  4. 从 GitLab 复制Applicat ion ID和 Secret,粘贴到 Rancher UI 的对应位置。
  5. 选择使用私有 GitLab 部署,输入安装 GitLab 的主机地址。
  6. 单击认证,完成认证。

三、 配置代码库


Rancher UI操作:

  1. 从全局视图,导航到你想要配置流水线的项目。
  2. 点击资源 > 流水线。
  3. 点击设置代码库。
  4. 显示代码库列表。如果您是第一次配置代码库,点击 认证 & 同步代码库去刷新您的代码库列表。
  5. 对于您想设置流水线的每个代码库,点击启用。
  6. 当你启用所有代码库后,点击完成。

四、 配置流水线

流水线文件.rancher-pipeline.yaml


Rancher UI操作:

全局视图,导航到您想要配置流水线的项目。

  1. 点击资源> 流水线。
  2. 找到您想设置流水线的代码库。
  3. 通过 UI 或者使用代码库中的yml文件,例如.rancher-pipeline.yml或者.rancher-pipeline.yaml进行流水线的配置。

注意1:在yaml文件里,可以为 Docker 守护进程和构建使用特定的参数,它们没有显示在 UI 中,但是可以在 YAML 中设置它们,如下例所示。可用的环境变量包括:

变量名 描述
PLUGIN_DRY_RUN 禁用 docker push
PLUGIN_DEBUG 以 Debug 模式运行 Docker 守护进程
PLUGIN_MIRROR 配置 Docker 守护进程的镜像库 mirror
PLUGIN_INSECURE 允许 Docker 守护进程使用不安全的镜像库
PLUGIN_BUILD_ARGS 由逗号分隔的 Docker 构建参数

注意2:为了方便起见,有些变量可用于流水线的配置脚本中。在流水线执行期间,这些变量将被替换为元数据。可以通过${VAR_NAME}的形式引用它们。

变量名 描述
CICD_GIT_REPO_NAME 代码库名称
CICD_GIT_URL 代码库 Git 地址
CICD_GIT_COMMIT 触发流水线的 Git commit ID
CICD_GIT_BRANCH 触发流水线的 Git 分支
CICD_GIT_REF 触发流水线的 Git 详细信息
CICD_GIT_TAG 触发流水线的 Tag 名称。仅在由 tag 事件触发时可用。
CICD_EVENT 触发流水线的的事件名称 (push,pull_request 或 tag)。
CICD_PIPELINE_ID 这个流水线在 Rancher 中的 ID
CICD_EXECUTION_SEQUENCE 流水线的 Build Number
CICD_EXECUTION_ID 内容组成为{CICD_PIPELINE_ID}-{CICD_EXECUTION_SEQUENCE}。
CICD_REGISTRY 在发布镜像步骤中使用的镜像仓库地址。这个变量在部署 YAML步骤中的 Kubernetes YAML 文件中可用。
CICD_IMAGE 在发布镜像步骤中使用的镜像名称。这个变量在部署 YAML步骤中的 Kubernetes YAML 文件中可用。这个名称不包括镜像的标

流水线.rancher-pipeline.yml示例

.rancher-pipeline可从rancherUI生成上传至代码仓库根目录下,也可直接编辑上传至代码仓库根目录下

  1. # rancher-pipeline.yml文件模板
  2. stages: # 阶段
  3. - name: test # 阶段——测试
  4. steps: # 步骤
  5. - runScriptConfig: # 脚本配置
  6. image: $CICD_REGISTRY/$TEST_IMAGE_NAME:$TEST_IMAGE_TAG # 测试阶段所需的基础镜像,$镜像仓库地址/$测试镜像名字:$镜像版本
  7. shellScript: python -m pytest tests/ # 测试命令/脚本
  8. when: # 运行脚本触发条件,当分支为master时运行脚本
  9. branch:
  10. include:
  11. - master
  12. when: # 阶段运行触发条件,当分支为master时运行此阶段
  13. branch:
  14. include:
  15. - master
  16. - name: build # 阶段——构建
  17. steps:
  18. - publishImageConfig: # 构建并发布镜像配置
  19. dockerfilePath: ./Dockerfile # Dockerfile所在位置
  20. buildContext: . # 构建上下文
  21. tag: ${CICD_GIT_REPO_NAME}:${CICD_EXECUTION_SEQUENCE} # 镜像名字,$项目名称:$CICD执行序列号
  22. pushRemote: true # 是否发布到远程镜像
  23. registry: $CICD_REGISTRY # 镜像发布的远程仓库地址
  24. env:
  25. PLUGIN_INSECURE: "true" # 使用私有仓库
  26. - name: deploy # 阶段——部署
  27. steps:
  28. - applyYamlConfig: # 部署服务配置
  29. path: ./deployment.yaml # 部署服务到k8s环境中所需的部署文件
  30. when: # 部署条件
  31. branch: {}
  32. timeout: 120
  33. notification: {}

镜像文件Dockerfile示例

Dockerfile放置代码仓库根目录下

  1. # 选择基础镜像
  2. FROM 192.168.129.112:10001/zkr-env-python:3.8-buster
  3. COPY requirements.txt .
  4. # 安装项目需要的包
  5. RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple &&\
  6. pip install --upgrade pip &&\
  7. pip install --no-warn-script-location --use-feature=2020-resolver --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  8. # cd至项目目录
  9. WORKDIR /usr/src/app/echo-api
  10. # 设置环境变量
  11. ENV PYTHONPATH=/usr/src/app/echo-api
  12. # 上传项目代码到镜像
  13. COPY . .
  14. ENV TZ="Asia/Shanghai"
  15. LABEL author="gpp" email="guopanpan@sinosoft.com.cn"
  16. # 启动项目命令
  17. CMD ["python", "app/start_server.py"]

部署文件deployment.yaml示例

部署文件放置代码仓库根目录下

  1. --- # ---是分隔符,非必须
  2. # 一、controller(Dployment)
  3. apiVersion: apps/v1 # apiVersion,api等级,这个版本号需要根据我们安装的kubernetes版本和资源类型进行选择。
  4. kind: Deployment # 资源类型:Deployment,根据实际情况也可以是 Pod/Job/Ingress/Service...
  5. metadata: # metadata:Deployment元数据信息,比如名称、命名空间、标签等
  6. labels: # 标签
  7. workload: echo # 标签内容,以kv进行形式表示
  8. name: echo-bmsf-fast # Deployment名字
  9. namespace: echo-yokai # 命名空间选择
  10. # 二、ReplicaSet
  11. spec: # spec:规范,即具体参数设置
  12. replicas: 2 # 副本
  13. selector: # 选择器
  14. matchLabels: # 选择符合对应标签的pod进行设置
  15. workload: echo-test
  16. strategy:
  17. type: Recreate # 更新重启规则,重新创建,表示删除之前的pod,重新创建一个新的pod,此外,还有RollingUpdate等策略
  18. # 三、pod
  19. template:
  20. metadata:
  21. labels: # pod标签
  22. workload: echo-test
  23. spec:
  24. containers:
  25. - name: echo-bmsf-fast
  26. env: # 环境变量设置
  27. - name: ALL_PROXY
  28. value: http://10.20.10.100:10808
  29. - name: all_proxy
  30. value: http://10.20.10.100:10808
  31. image: 192.168.129.112:10001/zkr-echo-${CICD_GIT_REPO_NAME}:1.${CICD_EXECUTION_SEQUENCE} # 镜像名称,指定仓库
  32. imagePullPolicy: Always # 镜像拉取规则
  33. volumeMounts: # 挂载卷
  34. - mountPath: /usr/src/app/clients # 容器内挂载路径
  35. name: volv
  36. subPath: clients # 子路径
  37. ports: # 端口映射规则,默认为clusterport类型(生成集群IP和端口,集群内部服务可访问)
  38. - containerPort: 8000 # 容器端口为8000
  39. name: echo-bmsf-fast-service
  40. resources:
  41. limits: # 资源限制
  42. cpu: 100m
  43. memory: 200Mi
  44. requests: # 资源预留(注意:如果只对pod进行资源限制设置,那么资源预留默认会等于资源限制份额,为了不占取过多资源,在设置限制的同时设置少许预留)
  45. cpu: 3m
  46. memory: 2Mi
  47. imagePullSecrets: # 镜像仓库选择,提前在rancherUI中设置
  48. - name: 10001-docker-registry
  49. restartPolicy: Always
  50. volumes:
  51. - name: volv # 对应卷详情
  52. persistentVolumeClaim: # 所使用的pvc名字
  53. claimName: longhorn-volv-pvc
  54. ---
  55. apiVersion: v1
  56. kind: Service
  57. metadata:
  58. name: echo-bmsf-fast-service
  59. namespace: echo-yokai
  60. spec:
  61. type: NodePort
  62. selector: # 选择器
  63. workload: echo-test # 选择符合对应标签的pod进行设置
  64. ports: # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
  65. - port: 8000
  66. protocol: TCP
  67. targetPort: 8000
  68. # nodePort: 30007
  69. # nodePort可选字段,默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
  70. ---
  71. apiVersion: v1
  72. kind: PersistentVolumeClaim # 类型,pvc
  73. metadata: # pvc元数据信息
  74. name: longhorn-volv-pvc
  75. namespace: echo-yokai
  76. spec:
  77. accessModes:
  78. - ReadWriteOnce # 在这里我们使用longhorn为存储类,从longhorn里分配资源给pvc,pvc模式为单主机读写
  79. resources:
  80. requests: # 分配pvc资源
  81. storage: 1Gi
  82. storageClassName: longhorn # 存储类为longhorn