Rancher2.x流水线自动化部署

1、概述

  由于一些项目使用了rancher进行部署发布,所以使用Rancher的流水线自动部署功能实现CICD,从gitlab、harbor安装,到流水线配置和中间的一些问题一一进行详细介绍解答。

2、准备工作

  前期的Docker和Rancher安装就不在描述,直接进入正题

  2.1 gitlab安装

     gitlab安装很简单,配置到相应pvc和external_url即可

      yaml文件如下

1apiVersion: apps/v1beta2 2kind: Deployment 3metadata: 4 annotations: 5 deployment.kubernetes.io/revision: "1" 6 field.cattle.io/creatorId: user-ff6zz 7 field.cattle.io/publicEndpoints: '[{"addresses":["10.10.1.3"],"port":31901,"protocol":"TCP","serviceName":"gitlab:gitlab-nodeport","allNodes":true}]' 8 creationTimestamp: "2019-12-02T12:48:28Z" 9 generation: 2 10 labels: 11 cattle.io/creator: norman 12 workload.user.cattle.io/workloadselector: deployment-gitlab-gitlab 13 name: gitlab 14 namespace: gitlab 15 resourceVersion: "3780" 16 selfLink: /apis/apps/v1beta2/namespaces/gitlab/deployments/gitlab 17 uid: 68d9ca46-80bf-4b2b-af50-a9e69aadf12a 18spec: 19 progressDeadlineSeconds: 600 20 replicas: 1 21 revisionHistoryLimit: 10 22 selector: 23 matchLabels: 24 workload.user.cattle.io/workloadselector: deployment-gitlab-gitlab 25 strategy: 26 rollingUpdate: 27 maxSurge: 1 28 maxUnavailable: 0 29 type: RollingUpdate 30 template: 31 metadata: 32 annotations: 33 cattle.io/timestamp: "2019-12-02T12:48:37Z" 34 field.cattle.io/ports: '[[{"containerPort":31901,"dnsName":"gitlab-nodeport","kind":"NodePort","name":"31901tcp319011","protocol":"TCP","sourcePort":31901}]]' 35 creationTimestamp: null 36 labels: 37 workload.user.cattle.io/workloadselector: deployment-gitlab-gitlab 38 spec: 39 containers: 40 - env: 41 - name: GITLAB_OMNIBUS_CONFIG 42 value: external_url 'http://10.10.1.3:31901' 43 image: gitlab/gitlab-ce:12.4.5-ce.0 44 imagePullPolicy: Always 45 name: gitlab 46 ports: 47 - containerPort: 31901 48 name: 31901tcp319011 49 protocol: TCP 50 resources: {} 51 securityContext: 52 allowPrivilegeEscalation: false 53 capabilities: {} 54 privileged: false 55 readOnlyRootFilesystem: false 56 runAsNonRoot: false 57 stdin: true 58 terminationMessagePath: /dev/termination-log 59 terminationMessagePolicy: File 60 tty: true 61 volumeMounts: 62 - mountPath: /etc/gitlab 63 name: vol1 64 - mountPath: /var/log/gitlab 65 name: vol2 66 - mountPath: /var/opt/gitlab 67 name: vol3 68 dnsPolicy: ClusterFirst 69 restartPolicy: Always 70 schedulerName: default-scheduler 71 securityContext: {} 72 terminationGracePeriodSeconds: 30 73 volumes: 74 - name: vol1 75 persistentVolumeClaim: 76 claimName: gitlab-config 77 - name: vol2 78 persistentVolumeClaim: 79 claimName: gitlab-log 80 - name: vol3 81 persistentVolumeClaim: 82 claimName: gitlab-data 83status: 84 availableReplicas: 1 85 conditions: 86 - lastTransitionTime: "2019-12-02T12:51:23Z" 87 lastUpdateTime: "2019-12-02T12:51:23Z" 88 message: Deployment has minimum availability. 89 reason: MinimumReplicasAvailable 90 status: "True" 91 type: Available 92 - lastTransitionTime: "2019-12-02T12:48:28Z" 93 lastUpdateTime: "2019-12-02T12:51:23Z" 94 message: ReplicaSet "gitlab-db7b54f5c" has successfully progressed. 95 reason: NewReplicaSetAvailable 96 status: "True" 97 type: Progressing 98 observedGeneration: 2 99 readyReplicas: 1 100 replicas: 1 101 updatedReplicas: 12.2

  2.2 harbor安装

     harbor私有docker镜像仓库安装,为了做到持久化,先行安装pgsql和redis。pgsql安装好后先创建registry,clair,notary_server,notary_signer4个数据库然后在商店选择harbor,配置相关选项,然后在harbor启动后,如果没有使用https,需要在node主机上的docker配置文件daemon.json中加入harbor私用镜像库地址 "insecure-registries":["10.10.1.3:30003"],不然docker会报证书问题的错误。然后在rancher的资源->镜像库凭证中添加相关凭证。最后把接下来需要的镜像上传到harbor,上传前需要docker login。

1docker pull mcr.microsoft.com/dotnet/core/sdk:3.0 2docker tag mcr.microsoft.com/dotnet/core/sdk:3.0 10.10.1.3:30003/jfwang/mcr.microsoft.com/dotnet/core/sdk:3.0 3docker push 10.10.1.3:30003/jfwang/mcr.microsoft.com/dotnet/core/sdk:3.0

     

             

                

               

3、配置流水线

  配置rancher的token和key在后续自动部署的时候直接操作容器,

点击添加key,然后记住token和key。

然后在工作负载->流水线->配置代码库->认证&同步代码库,我这里选择的gitlab,按照配置即可

授权成功后,需要在setting->network->Outbound requests下勾选Allow requests to the local network from web hooks and services,这样代码的pull命令才会触发钩子。

同步完代码库后,点击启用,点击编辑配置对流水线进行具体配置。

第一步clone代码是自带的无需配置

第二步执行测试操作,点击添加阶段。然后在阶段里添加步骤,步骤类型为运行脚本,基础镜像填你执行命令的所需镜像,不同程序语言执行不同的脚本

第三步 发布程序,步骤类型和基础镜像和第二步一样,脚本为发布脚本

第四不 构建镜像,步骤类型构建并发布镜像,Dockerfile路径就填写你代码中Dockerfile的路径,镜像名称如果你要push到自己的镜像仓库则规则必须是  镜像项目名/程序名,不然无权限,最后勾选我们最开始配置的私有镜像仓库地址。

 

 Dockerfile

1FROM 10.10.1.3:30003/jfwang/mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime 2WORKDIR /app 3COPY /src/publish ./ 4ENTRYPOINT ["dotnet", "pipeline-example-dotnetcore.dll"]

第五步,因我们要自动部署应用到rancher,为了重复部署的时候防止端口被占用,名称重复等等,我们直接先通过rancher api 执行删除pod操作。注意如果不是用的https要在最后面加-k参数,不然会报证书错误。

1curl -u "{token}:{key}" \ 2-X DELETE \ 3-H 'Accept: application/json' \ 4'https://10.10.1.3/v3/project/c-24h9n:p-f9cxk/workloads/deployment:default:pipeline-example-dotnetcore' -k

第六步 通过yaml部署应用

路径填写代码中的yaml路径

yaml

1apiVersion: apps/v1beta2 2kind: Deployment 3metadata: 4 name: pipeline-example-dotnetcore 5 namespace: default 6spec: 7 progressDeadlineSeconds: 600 8 replicas: 1 9 revisionHistoryLimit: 10 10 selector: 11 matchLabels: 12 workload.user.cattle.io/workloadselector: deployment-default-pipeline-example-dotnetcore 13 strategy: 14 type: Recreate 15 template: 16 metadata: 17 annotations: 18 cattle.io/timestamp: "2019-12-01T08:37:18Z" 19 field.cattle.io/ports: '[[{"containerPort":80,"dnsName":"pipeline-example-dotnetcore-hostport","hostPort":5000,"kind":"HostPort","name":"5000tcp50000","protocol":"TCP","sourcePort":5000}]]' 20 creationTimestamp: null 21 labels: 22 workload.user.cattle.io/workloadselector: deployment-default-pipeline-example-dotnetcore 23 spec: 24 containers: 25 - image: ${CICD_IMAGE}:1.${CICD_EXECUTION_SEQUENCE} 26 imagePullPolicy: Always 27 name: pipeline-example-dotnetcore 28 ports: 29 - containerPort: 80 30 hostPort: 5000 31 name: 5000tcp50000 32 protocol: TCP 33 resources: {} 34 securityContext: 35 allowPrivilegeEscalation: false 36 capabilities: {} 37 privileged: false 38 readOnlyRootFilesystem: false 39 runAsNonRoot: false 40 stdin: true 41 terminationMessagePath: /dev/termination-log 42 terminationMessagePolicy: File 43 tty: true 44 dnsPolicy: ClusterFirst 45 imagePullSecrets: 46 - name: harbor 47 restartPolicy: Always 48 schedulerName: default-scheduler 49 securityContext: {} 50 terminationGracePeriodSeconds: 30 51status: 52 availableReplicas: 1 53 conditions: 54 - lastTransitionTime: "2019-12-01T08:37:21Z" 55 lastUpdateTime: "2019-12-01T08:37:21Z" 56 message: Deployment has minimum availability. 57 reason: MinimumReplicasAvailable 58 status: "True" 59 type: Available 60 - lastTransitionTime: "2019-12-01T08:32:53Z" 61 lastUpdateTime: "2019-12-01T08:37:21Z" 62 message: ReplicaSet "pipeline-example-dotnetcore-84d4cfbb75" has successfully progressed. 63 reason: NewReplicaSetAvailable 64 status: "True" 65 type: Progressing 66 observedGeneration: 7 67 readyReplicas: 1 68 replicas: 1 69 updatedReplicas: 1

至此全部部署完毕。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )