一、基础准备
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:- masterwhen: # 阶段运行触发条件,当分支为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: 120notification: {}
镜像文件Dockerfile示例
Dockerfile放置代码仓库根目录下
# 选择基础镜像FROM 192.168.129.112:10001/zkr-env-python:3.8-busterCOPY 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 # 命名空间选择# 二、ReplicaSetspec: # spec:规范,即具体参数设置replicas: 2 # 副本selector: # 选择器matchLabels: # 选择符合对应标签的pod进行设置workload: echo-teststrategy:type: Recreate # 更新重启规则,重新创建,表示删除之前的pod,重新创建一个新的pod,此外,还有RollingUpdate等策略# 三、podtemplate:metadata:labels: # pod标签workload: echo-testspec:containers:- name: echo-bmsf-fastenv: # 环境变量设置- name: ALL_PROXYvalue: http://10.20.10.100:10808- name: all_proxyvalue: http://10.20.10.100:10808image: 192.168.129.112:10001/zkr-echo-${CICD_GIT_REPO_NAME}:1.${CICD_EXECUTION_SEQUENCE} # 镜像名称,指定仓库imagePullPolicy: Always # 镜像拉取规则volumeMounts: # 挂载卷- mountPath: /usr/src/app/clients # 容器内挂载路径name: volvsubPath: clients # 子路径ports: # 端口映射规则,默认为clusterport类型(生成集群IP和端口,集群内部服务可访问)- containerPort: 8000 # 容器端口为8000name: echo-bmsf-fast-serviceresources:limits: # 资源限制cpu: 100mmemory: 200Mirequests: # 资源预留(注意:如果只对pod进行资源限制设置,那么资源预留默认会等于资源限制份额,为了不占取过多资源,在设置限制的同时设置少许预留)cpu: 3mmemory: 2MiimagePullSecrets: # 镜像仓库选择,提前在rancherUI中设置- name: 10001-docker-registryrestartPolicy: Alwaysvolumes:- name: volv # 对应卷详情persistentVolumeClaim: # 所使用的pvc名字claimName: longhorn-volv-pvc---apiVersion: v1kind: Servicemetadata:name: echo-bmsf-fast-servicenamespace: echo-yokaispec:type: NodePortselector: # 选择器workload: echo-test # 选择符合对应标签的pod进行设置ports: # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。- port: 8000protocol: TCPtargetPort: 8000# nodePort: 30007# nodePort可选字段,默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)---apiVersion: v1kind: PersistentVolumeClaim # 类型,pvcmetadata: # pvc元数据信息name: longhorn-volv-pvcnamespace: echo-yokaispec:accessModes:- ReadWriteOnce # 在这里我们使用longhorn为存储类,从longhorn里分配资源给pvc,pvc模式为单主机读写resources:requests: # 分配pvc资源storage: 1GistorageClassName: longhorn # 存储类为longhorn
