KubeSphere内网环境实践GO项目流水线

KubeSphere内网环境实践GO项目流水线

kubesphere官方给出的流水线都是在公网环境下,并对接github、dockerhub等环境。本文在内网实践部署,代码库使用内网部署的gitlab,镜像仓库使用harbor。

1. 环境准备

1.1 部署kubesphere环境

参考官方文档完成:

https://www.kubesphere.io/zh/docs/v4.1/03-installation-and-upgrade/02-install-kubesphere/02-install-kubernetes-and-kubesphere/

本文使用到的版本如下:

KubeSphere 版本 : v3.4.1

kubernetes 版本: v1.23.15

操作系统版本:Ubuntu 20.04.2 LTS

1.2 部署kubesphere devops环境

devops作为kubesphere的扩展组件使用,需要在扩容组件中安装kubesphere。

1.3 devops用户指南完成基本的项目和人员创建

并创建对应的项目和人员账号。本文记录流水线配置的关键点,配置步骤主题参考kubesphere官方文档:

  1. Devops用户指南:https://www.kubesphere.io/zh/docs/v4.1/11-use-extensions/01-devops/
  2. 构建和部署 Go 项目:https://www.kubesphere.io/zh/docs/v3.3/devops-user-guide/examples/go-project-pipeline/

2. 代码导入私有仓库并修改

官方给出的go示例项目代码库地址:https://github.com/yuswift/devops-go-sample.git,这里将代码库导入到本地部署的gitlab环境,可以离线下载然后导入(通过git操作),或者通过gitlab导入项目的功能完成(gitlab需要联网)。

导入完成后对于代码库内容进行必要的修改。

2.1 dockerfile修改

修改代码仓库根路径下的dockerfile文件,主要修改构建的基础镜像,此处指向内网的harbor仓库,需要提前在harbor仓库中上传golang:1.15镜像:

# Build the manager binary
# FROM golang:1.15 as builder
# 下面的golang镜像替换为内网harbor上的url
FROM 10.210.10.236:30002/language/golang:1.15 as builderWORKDIR /devopsCOPY go.mod go.mod
COPY cmd/ cmd/RUN go mod download# Build
RUN CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -a -o devops-go-sample cmd/main.go# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
# FROM alpine:3.9
# # 下面的alpine镜像替换为内网harbor上的url
FROM 10.210.10.236:30002/os/alpine:3.9
WORKDIR /devops
COPY --from=builder /devops/devops-go-sample .ENTRYPOINT ["./devops-go-sample"]

go项目的dockerfile采用多阶段构建,编译构建使用golang镜像完成,然后将编译构建的中间制品(二进制文件)打包到alpine镜像中作为最终部署的镜像。

2.2 部署YAML修改

官方demo中,部署使用的是dockerhub镜像仓库,这里改为内部的harbor仓库。修改manifest文件夹下面的deploy.yaml文件,主要修改image 路径:

              # image: $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAMEimage: $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME

说明

image url采用环境变量的方式传递,上述环境变量名称需要与下文中jenkinsfile中定义的环境变量保持一致。

3. jenkinsfile内容如下

新建流水线,基于Jenkinsfile,内容如下。

说明

注意针对注释部分【jenksinfile注释语法://】的修改,Jenkins流水线对接内网的harbor和gitlab。

pipeline {  agent {label 'go'}environment {// 镜像仓库地址,这里改为内网部署的harborREGISTRY = '10.210.10.236:30002'// Harbor的项目名称,最终应用构建的镜像会推送到该项目下HARBOR_NAMESPACE = 'devops-sample-pro'// 最终构建的docker应用镜像名称APP_NAME = 'devops-go-sample'HARBOR_CREDENTIAL_ID = 'harbor-id'// 在 KubeSphere 创建的 kubeconfig 凭证 IDKUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'// 在 KubeSphere 创建的项目名称,不是 DevOps 项目名称。最终部署的应用运行在该命名空间下PROJECT_NAME = 'go-project-demo'}stages {stage('docker login') {steps{container ('go') {withCredentials([usernamePassword(passwordVariable : 'HARBOR_PASSWORD' ,usernameVariable : 'HABOR_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {sh 'echo "$HARBOR_PASSWORD" | docker login $REGISTRY -u "$HABOR_USERNAME" --password-stdin'		  }// sh 'echo $HARBOR_CREDENTIAL_PSW | docker login -u $HARBOR_CREDENTIAL_USR --password-stdin'}}}stage('build & push') {steps {container ('go') {// 修改git代码仓库地址为内网gitlab仓库地址sh 'git clone http://gitlab.jdzx.local/root/devops-go-sample.git'sh 'cd devops-go-sample && docker build -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME .'sh 'docker push $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME'}}}stage ('deploy app') {steps {container ('go') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID,variable: 'KUBECONFIG')]) {sh 'envsubst < devops-go-sample/manifest/deploy.yaml | kubectl apply -f -'}}}}}
}

流水线包括如下阶段:

1. 登录docker

2. 构建和推送(包括代码检出)

3. 部署应用

图像界面查看流水线:

go-devops-pipeline

上述使用的相关CREDENTIAL_ID需要提前在凭证中进行创建:

auth

4. 创建部署应用的项目

使用项目管理员project-admin创建项目go-project-demo,非devops项目:

go-project-demo-app

项目管理添加project-regular成员,并设置operator角色:

go-project-demo-member

5. 运行流水线

go-devops-result

流水线运行过程提供了详细的日志,可以结合运行日志进行排错。

6. 查看应用部署

后台查看:

root@kubesphere2-1:~# kubectl get pod -n go-project-demo
NAME                                READY   STATUS    RESTARTS   AGE
devops-go-sample-59997797dc-ks9v8   1/1     Running   0          64s
devops-go-sample-59997797dc-qnqb8   1/1     Running   0          57s
devops-go-sample-59997797dc-rfjgj   1/1     Running   0          60s
root@kubesphere2-1:~# kubectl logs -n go-project-demo  devops-go-sample-59997797dc-ks9v8
devops-go-sample

前台查看部署的应用:

go-project-demo-app

7. 参考资料

1. kubesphere devops项目管理:

https://www.kubesphere.io/zh/docs/v3.3/devops-user-guide/devops-overview/devops-project-management/

2. go项目流水线:

https://www.kubesphere.io/zh/docs/v3.3/devops-user-guide/examples/go-project-pipeline/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5材质篇5 简易水面

不得不说&#xff0c;UE5里搞一个水面实在是相比要自己写各种反射来说太友好了&#xff0c;就主要是开启一堆开关&#xff0c;lumen相关的&#xff0c;然后稍微连一些蓝图就几乎有了 这里要改一个shading model&#xff0c;要这个 然后要增加一个这个node 并且不需要连接base …

浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)

首先&#xff0c;在InternStudio平台上创建开发机。 创建成功后点击进入开发机打开WebIDE。进入后在WebIDE的左上角有三个logo&#xff0c;依次表示JupyterLab、Terminal和Code Server&#xff0c;我们使用Terminal就行。&#xff08;JupyterLab可以直接看文件夹&#xff09;…

小白学多线程(持续更新中)

1.JDK中的线程池 JDK中创建线程池有一个最全的构造方法&#xff0c;里面七个参数如上所示。 执行流程分析&#xff1a; 模拟条件&#xff1a;10个核心线程数&#xff0c;200个最大线程数&#xff0c;阻塞队列大小为100。 当有小于十个任务要处理时&#xff0c;因为小于核心线…

40分钟学 Go 语言高并发:Context包与并发控制

Context包与并发控制 学习目标 知识点掌握程度应用场景context原理深入理解实现机制并发控制和请求链路追踪超时控制掌握超时设置和处理API请求超时、任务限时控制取消信号传播理解取消机制和传播链优雅退出、资源释放context最佳实践掌握使用规范和技巧工程实践中的常见场景…

音频信号采集前端电路分析

音频信号采集前端电路 一、实验要求 要求设计一个声音采集系统 信号幅度&#xff1a;0.1mVpp到1Vpp 信号频率&#xff1a;100Hz到16KHz 搭建一个带通滤波器&#xff0c;滤除高频和低频部分 ADC采用套件中的AD7920&#xff0c;转换率设定为96Ksps &#xff1b;96*161536 …

SpringBoot中使用Sharding-JDBC实战(实战+版本兼容+Bug解决)

一、实战 1、引入 ShardingSphere-JDBC 的依赖 https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc/5.5.0 <!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc --> <dependency><grou…

网络编程 day1.2~day2——TCP和UDP的通信基础(TCP)

笔记脑图 作业&#xff1a; 1、将虚拟机调整到桥接模式联网。 2、TCP客户端服务器实现一遍。 服务器 #include <stdio.h> #include <string.h> #include <myhead.h> #define IP "192.168.60.44" #define PORT 6666 #define BACKLOG 20 int mai…

PyQT开发与实践:全面掌握跨平台桌面应用开发

目录 引言 PyQT简介 PyQT的主要特点 开发环境搭建 PyQT开发流程 1. 创建项目和主窗口 2. 添加控件和布局 3. 信号与槽 4. 样式和美化 高级特性 数据绑定和模型/视图编程 多线程和并发 国际化和本地化 实践案例&#xff1a;简单的计算器应用 1. 界面设计 2. 逻辑…

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…

Origin教程003:数据导入(2)-从文件导入和导入矩阵数据

文章目录 3.3 从文件导入3.3.1 导入txt文件3.3.2 导入excel文件3.3.3 合并工作表3.4 导入矩阵数据3.3 从文件导入 所需数据 https://download.csdn.net/download/WwLK123/900267473.3.1 导入txt文件 选择【数据->从文件导入->导入向导】: 选择文件之后,点击完成即可…

刷题计划 day22回溯(一)【组合】【组合总和 III】【电话号码的字母组合】

⚡刷题计划day22 回溯&#xff08;一&#xff09;开始&#xff0c;此期开启回溯专题&#xff0c;敬请期待关注&#xff0c;可以点个免费的赞哦~ 往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 回溯算法理论基础 回溯法解决的…

访问限定符

文章目录 一、访问限定符 一、访问限定符 C⼀种实现封装的⽅式&#xff0c;用类将对象的属性与方法结合在⼀块&#xff0c;让对象更加完善&#xff0c;通过访问权限选择性的将其接口提供给外部的用户使用。 public修饰的成员在类外可以直接被访问&#xff1b;protected和priva…

【论文阅读】WGSR

0. 摘要 0.1. 问题提出 1.超分辨率(SR)是一个不适定逆问题&#xff0c;可行解众多。 2.超分辨率(SR)算法在可行解中寻找一个在保真度和感知质量之间取得平衡的“良好”解。 3.现有的方法重建高频细节时会产生伪影和幻觉&#xff0c;模型区分图像细节与伪影仍是难题。 0.2. …

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练&#xff08;23&#xff09;&#xff1a;洛谷P1217&#xff1a;[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 …

【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录

背景 Jetbrain IDE 支持生成 Test 类&#xff0c;其中选择JUnit5 和 JUnit&#xff0c;但是感觉这不是标准的单元测试&#xff0c;因为接口命名吧。 差异对比 两者生成的单测API名称同原API&#xff0c;没加test前缀的。使用差异主要表现在&#xff1a; setUp &#xff06; …

Kylin Server V10 下基于Sentinel(哨兵)实现Redis高可用集群

一、什么是哨兵模式 Redis Sentinel 是一个分布式系统,为 Redis 提供高可用性解决方案。可以在一个架构中运行多个 Sentinel 进程(progress)这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线信息,并使用投票协议(agreement protocols)来决定是否执行…

扩散模型从原理到实战 入门

diffusion-models-class-CN/unit1/README_CN.md at main darcula1993/diffusion-models-class-CN GitHub 你可以使用命令行来通过此令牌登录 (huggingface-cli login) 或者运行以下单元来登录&#xff1a; from huggingface_hub import notebook_loginnotebook_login() http…

阅读《先进引信技术的发展与展望》识别和控制部分_笔记

基本信息 题名&#xff1a;先进引信技术的发展与展望 作者&#xff1a; 张合;戴可人 发表时间&#xff1a;2023-07-20 可装定、可探测、可处理、可控制是灵巧引信设计的四项基本能力。与之对应&#xff0c;先进引信的基础研究涵盖了信息交联技术、末端探测技术、目标识别技术…

07-Making a Bar Chart with D3.js and SVG

课程链接 Curran的课程&#xff0c;通过 D3.js 的 scaleLinear, max, scaleBand, axisLeft, axisBottom&#xff0c;根据 .csv 文件生成一个横向柱状图。 【注】如果想造csv数据&#xff0c;可以使用通义千问&#xff0c;关于LinearScale与BandScale不懂的地方也可以在通义千…

Fakelocation Server服务器/专业版 ubuntu

前言:需要Ubuntu系统 Fakelocation开源文件系统需求 Ubuntu | Fakelocation | 任务一 任务一 更新Ubuntu&#xff08;安装下载不再赘述&#xff09; sudo -i # 提权 sudo apt update # 更新软件包列表 sudo apt upgrade # 升级已安装的软…