一、基础准备
Rancher UI操作:
- 在rancherUI创建项目
- 创建命名空间
- 设置镜像库凭证
二、 对接GitLab
Rancher UI操作:
- 从全局页面导航到需要配置流水线的项目。
- 从导航栏选择工具> 流水线。
- 按照 UI 界面的的提示,配置 GitLab 应用。Rancher 会打开 GitLab 网页。
- 从 GitLab 复制Applicat ion ID和 Secret,粘贴到 Rancher UI 的对应位置。
- 选择使用私有 GitLab 部署,输入安装 GitLab 的主机地址。
- 单击认证,完成认证。
三、 配置代码库
Rancher UI操作:
- 从全局视图,导航到你想要配置流水线的项目。
- 点击资源 > 流水线。
- 点击设置代码库。
- 显示代码库列表。如果您是第一次配置代码库,点击 认证 & 同步代码库去刷新您的代码库列表。
- 对于您想设置流水线的每个代码库,点击启用。
- 当你启用所有代码库后,点击完成。
四、 配置流水线
流水线文件.rancher-pipeline.yaml
Rancher UI操作:
从全局视图,导航到您想要配置流水线的项目。
- 点击资源> 流水线。
- 找到您想设置流水线的代码库。
- 通过 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生成上传至代码仓库根目录下,也可直接编辑上传至代码仓库根目录下
# rancher-pipeline.yml文件模板
stages: # 阶段
- name: test # 阶段——测试
steps: # 步骤
- runScriptConfig: # 脚本配置
image: $CICD_REGISTRY/$TEST_IMAGE_NAME:$TEST_IMAGE_TAG # 测试阶段所需的基础镜像,$镜像仓库地址/$测试镜像名字:$镜像版本
shellScript: python -m pytest tests/ # 测试命令/脚本
when: # 运行脚本触发条件,当分支为master时运行脚本
branch:
include:
- master
when: # 阶段运行触发条件,当分支为master时运行此阶段
branch:
include:
- master
- name: build # 阶段——构建
steps:
- publishImageConfig: # 构建并发布镜像配置
dockerfilePath: ./Dockerfile # Dockerfile所在位置
buildContext: . # 构建上下文
tag: ${CICD_GIT_REPO_NAME}:${CICD_EXECUTION_SEQUENCE} # 镜像名字,$项目名称:$CICD执行序列号
pushRemote: true # 是否发布到远程镜像
registry: $CICD_REGISTRY # 镜像发布的远程仓库地址
env:
PLUGIN_INSECURE: "true" # 使用私有仓库
- name: deploy # 阶段——部署
steps:
- applyYamlConfig: # 部署服务配置
path: ./deployment.yaml # 部署服务到k8s环境中所需的部署文件
when: # 部署条件
branch: {}
timeout: 120
notification: {}
镜像文件Dockerfile示例
Dockerfile放置代码仓库根目录下
# 选择基础镜像
FROM 192.168.129.112:10001/zkr-env-python:3.8-buster
COPY requirements.txt .
# 安装项目需要的包
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple &&\
pip install --upgrade pip &&\
pip install --no-warn-script-location --use-feature=2020-resolver --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# cd至项目目录
WORKDIR /usr/src/app/echo-api
# 设置环境变量
ENV PYTHONPATH=/usr/src/app/echo-api
# 上传项目代码到镜像
COPY . .
ENV TZ="Asia/Shanghai"
LABEL author="gpp" email="guopanpan@sinosoft.com.cn"
# 启动项目命令
CMD ["python", "app/start_server.py"]
部署文件deployment.yaml示例
部署文件放置代码仓库根目录下
--- # ---是分隔符,非必须
# 一、controller(Dployment)
apiVersion: apps/v1 # apiVersion,api等级,这个版本号需要根据我们安装的kubernetes版本和资源类型进行选择。
kind: Deployment # 资源类型:Deployment,根据实际情况也可以是 Pod/Job/Ingress/Service...
metadata: # metadata:Deployment元数据信息,比如名称、命名空间、标签等
labels: # 标签
workload: echo # 标签内容,以kv进行形式表示
name: echo-bmsf-fast # Deployment名字
namespace: echo-yokai # 命名空间选择
# 二、ReplicaSet
spec: # spec:规范,即具体参数设置
replicas: 2 # 副本
selector: # 选择器
matchLabels: # 选择符合对应标签的pod进行设置
workload: echo-test
strategy:
type: Recreate # 更新重启规则,重新创建,表示删除之前的pod,重新创建一个新的pod,此外,还有RollingUpdate等策略
# 三、pod
template:
metadata:
labels: # pod标签
workload: echo-test
spec:
containers:
- name: echo-bmsf-fast
env: # 环境变量设置
- name: ALL_PROXY
value: http://10.20.10.100:10808
- name: all_proxy
value: http://10.20.10.100:10808
image: 192.168.129.112:10001/zkr-echo-${CICD_GIT_REPO_NAME}:1.${CICD_EXECUTION_SEQUENCE} # 镜像名称,指定仓库
imagePullPolicy: Always # 镜像拉取规则
volumeMounts: # 挂载卷
- mountPath: /usr/src/app/clients # 容器内挂载路径
name: volv
subPath: clients # 子路径
ports: # 端口映射规则,默认为clusterport类型(生成集群IP和端口,集群内部服务可访问)
- containerPort: 8000 # 容器端口为8000
name: echo-bmsf-fast-service
resources:
limits: # 资源限制
cpu: 100m
memory: 200Mi
requests: # 资源预留(注意:如果只对pod进行资源限制设置,那么资源预留默认会等于资源限制份额,为了不占取过多资源,在设置限制的同时设置少许预留)
cpu: 3m
memory: 2Mi
imagePullSecrets: # 镜像仓库选择,提前在rancherUI中设置
- name: 10001-docker-registry
restartPolicy: Always
volumes:
- name: volv # 对应卷详情
persistentVolumeClaim: # 所使用的pvc名字
claimName: longhorn-volv-pvc
---
apiVersion: v1
kind: Service
metadata:
name: echo-bmsf-fast-service
namespace: echo-yokai
spec:
type: NodePort
selector: # 选择器
workload: echo-test # 选择符合对应标签的pod进行设置
ports: # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
- port: 8000
protocol: TCP
targetPort: 8000
# nodePort: 30007
# nodePort可选字段,默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
---
apiVersion: v1
kind: PersistentVolumeClaim # 类型,pvc
metadata: # pvc元数据信息
name: longhorn-volv-pvc
namespace: echo-yokai
spec:
accessModes:
- ReadWriteOnce # 在这里我们使用longhorn为存储类,从longhorn里分配资源给pvc,pvc模式为单主机读写
resources:
requests: # 分配pvc资源
storage: 1Gi
storageClassName: longhorn # 存储类为longhorn