网络异常,图片无法展示
|
@TOC
前言:
📢📢📢 当下云原生火爆全网,云原生充分利用了云计算弹性、敏捷、资源池和服务化特性,改变云端应用的设计、开发、部署和运行模式,为我们大大提供了便利,本篇文章将带大家走进云原生的世界,揭开它的神秘面纱。 💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀 💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
一、 Jenkins集成Kubernetes
1.准备部署的yml文件
apiVersion: apps/v1 kind: Deployment metadata: namespace: test name: pipeline labels: app: pipeline spec: replicas: 2 selector: matchLabels: app: pipeline template: metadata: labels: app: pipeline spec: containers: - name: pipeline image: 192.168.11.102:80/repo/pipeline:v4.0.0 imagePullPolicy: Always ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: namespace: test labels: app: pipeline name: pipeline spec: selector: app: pipeline ports: - port: 8081 targetPort: 8080 type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: test name: pipeline spec: ingressClassName: ingress rules: - host: mashibing.pipeline.com http: paths: - path: / pathType: Prefix backend: service: name: pipeline port: number: 8081
2.Harbor私服配置
在尝试用kubernetes的yml文件启动pipeline服务时,会出现Kubernetes无法拉取镜像的问题,这里需要在kubernetes所在的Linux中配置Harbor服务信息,并且保证Kubernetes可以拉取Harbor上的镜像
- 设置Master和Worker的私服地址信息
设置Harbor私服地址 |
网络异常,图片无法展示
|
|
- 在Kuboard上设置私服密文信息
设置密文并测试 |
网络异常,图片无法展示
|
|
- 按照复制指令的位置测试认证,效果如下
测试效果 |
网络异常,图片无法展示
|
|
3.测试使用效果
执行kubectl命令,基于yml启动服务,并且基于部署后服务的提示信息以及Ingress的设置,直接访问
网络异常,图片无法展示
|
|
|
网络异常,图片无法展示
|
4.Jenkins远程调用
- 将pipeline.yml配置到Gitlab中
配置yml文件 |
网络异常,图片无法展示
|
|
- 配置Jenkins的目标服务器,可以将yml文件传输到K8s的Master上
设置目标服务器 |
网络异常,图片无法展示
|
|
- 修改Jenkinsfile,重新设置流水线任务脚本,并测试效果
传递yml文件脚本 |
网络异常,图片无法展示
|
|
-
网络异常,图片无法展示|
- 设置Jenkins无密码登录k8s-master
将Jenkins中公钥信息复制到k8s-master的~/.ssh/authorized_keysz中,保证远程连接无密码
远程执行命令无需密码 |
网络异常,图片无法展示
|
|
- 设置执行kubectl的脚本到Jenkinsfile
设置Jenkinsfile |
网络异常,图片无法展示
|
|
- 执行查看效果
执行流水线 |
网络异常,图片无法展示
|
|
- 可以查看到yml文件是由变化的, 这样k8s就会重新加载
- 查看效果
效果 |
网络异常,图片无法展示
|
|
Ps:这种方式更适应与CD操作,将项目将基于某个版本部署到指定的目标服务器
二、基于GitLab的WebHooks
这里要实现自动化的一个CI操作,也就是开发人员Push代码到Git仓库后,Jenkins会自动的构建项目,将最新的提交点代码构建并进行打包部署,这里区别去上述的CD操作,CD操作需要基于某个版本进行部署,而这里每次都是将最新的提交点集成到主干上并测试。
1.WebHooks通知
开启Jenkins的自动构建
构建触发器 |
网络异常,图片无法展示
|
|
设置Gitlab的Webhooks
设置Gitlab的Webhooks |
网络异常,图片无法展示
|
|
需要关闭Jenkins的Gitlab认证
关闭Jenkins的Gitlab认证 |
网络异常,图片无法展示
|
|
再次测试Gitlab
再次测试 |
网络异常,图片无法展示
|
|
2.修改配置
修改Jenkinsfile实现基于最新提交点实现持续集成效果,将之前引用${tag}的全部去掉
// 所有的脚本命令都放在pipeline中 pipeline{ // 指定任务再哪个集群节点中执行 agent any // 声明全局变量,方便后面使用 environment { harborUser = 'admin' harborPasswd = 'Harbor12345' harborAddress = '192.168.11.102:80' harborRepo = 'repo' } stages { stage('拉取git仓库代码') { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.11.101:8929/root/mytest.git']]]) } } stage('通过maven构建项目') { steps { sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests' } } stage('通过SonarQube做代码质量检测') { steps { sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701' } } stage('通过Docker制作自定义镜像') { steps { sh '''mv ./target/*.jar ./docker/ docker build -t ${JOB_NAME}:latest ./docker/''' } } stage('将自定义镜像推送到Harbor') { steps { sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress} docker tag ${JOB_NAME}:latest ${harborAddress}/${harborRepo}/${JOB_NAME}:latest docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:latest ''' } } stage('将yml文件传到k8s-master上') { steps { sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } stage('远程执行k8s-master的kubectl命令') { steps { sh '''ssh root@192.168.11.201 kubectl apply -f /usr/local/k8s/pipeline.yml ssh root@192.168.11.201 kubectl rollout restart deployment pipeline -n test''' } } } post { success { dingtalk( robot: 'Jenkins-DingDing', type: 'MARKDOWN', title: "success: ${JOB_NAME}", text: ["- 成功构建:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ] ) } failure { dingtalk( robot: 'Jenkins-DingDing', type: 'MARKDOWN', title: "success: ${JOB_NAME}", text: ["- 构建失败:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ] ) } } }
修改pipeline.yml,更改镜像版本
apiVersion: apps/v1 kind: Deployment metadata: namespace: test name: pipeline labels: app: pipeline spec: replicas: 2 selector: matchLabels: app: pipeline template: metadata: labels: app: pipeline spec: containers: - name: pipeline image: 192.168.11.102:80/repo/pipeline:latest # 这里 imagePullPolicy: Always ports: - containerPort: 8080 # 省略其他内容…………
3.滚动更新
因为pipeline没有改变时,每次不会重新加载,这样会导致Pod中的容器不会动态更新,这里需要使用kubectl的rollout restart命令滚动更新
设置Jenkinsfle |
网络异常,图片无法展示
|
|
网络异常,图片无法展示
|