如何使用KubeSphere3.0的DevOps系统构建dotnet core应用

2023-11-01

如何使用KubeSphere3.0的DevOps系统构建dotnet core应用

因KubeSphere的DevOps系统官方未提供.net core的ci/cd解决方案,需要自己进行DIY。现把实施过程记录下来,供需要的小伙伴自取。

前提环境:

上述准备工作已列出官方文档(如需要私有镜像仓库,可以直接使用Deployment部署nexus3,网上资料比较多),不再赘述。

基础镜像准备

我们基于官方提供的base镜像构建dotnet的编译观景。使用如下Dockerfile构建用于打包的基础镜像:

FROM kubesphere/builder-base:v2.1.0
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum install -y dotnet-sdk-3.1 #此处可以换成其他版本,也可以同时安装多个版本sdk一步到位
RUN dotnet tool install --global dotnet-sonarscanner --version 5.0.4  #(可选)安装dotnet的sonar-scanner
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/sonar-scanner-3.3.0.1492-linux/bin:/root/.nuget/tools:/root/.dotnet/tools
CMD ["dotnet", "--version"]

将Dockerfile置于一个空目录即可,然后打包并推送:

docker build -t builder-dotnet:v1.0.0 .
docker tag builder-dotnet:v1.0.0 xxx.com/builder-dotnet:v1.0.0
docker push xxx.com/builder-dotnet:v1.0.0

配置Jenkins Angent

如果需要使用本地docker仓库,请提前配置好仓库密钥(不赘述)。

如果要使用本地Nuget仓库,请在“配置中心->配置”中,筛选项目为kubesphere-devops-system,找到ks-devops-agent,在其中添加一条配置,比如NugetSetting,并把Nuget.config的内容粘进去。

ks安装的jenkins采用CasC进行配置,而CasC配置文件又通过ConfigMap定义,然后挂载到jenkins容器。

找到“配置中心->配置”,筛选项目为kubesphere-devops-system,找到jenkins-casc-config。修改其jenkins.yml的配置项,在containers下,对go的描述后面添加如下内容:

          - name: "dotnetcore"
            namespace: "kubesphere-devops-system"
            label: "dotnetcore"
            nodeUsageMode: "EXCLUSIVE"
            idleMinutes: 0
            containers:
            - name: "dotnetcore"
              image: "xxx.com/builder-dotnet:v1.0.0"     #镜像地址
              command: "cat"
              args: ""
              ttyEnabled: true
              resourceRequestCpu: "100m"
              resourceLimitCpu: "4000m"
              resourceRequestMemory: "100Mi"
              resourceLimitMemory: "8192Mi"
              alwaysPullImage: true
            - name: "jnlp"
              image: "jenkins/jnlp-slave:3.27-1"
              command: "jenkins-slave"
              args: "^${computer.jnlpmac} ^${computer.name}"
              resourceRequestCpu: "50m"
              resourceRequestMemory: "400Mi"
              resourceLimitMemory: "1536Mi"
            imagePullSecrets:                            #(可选)此处如果是使用私有仓库,请提前在密钥里准备好docker仓库密钥。
              - name: docker-local
            workspaceVolume:
              emptyDirWorkspaceVolume:
                memory: false
            volumes:
            - hostPathVolume:
                hostPath: "/var/run/docker.sock"
                mountPath: "/var/run/docker.sock"
            - hostPathVolume:                            #将nuget包缓存持久化到hostPath
                hostPath: "jenkins_nuget_cache"
                mountPath: "/root/.nuget"
            - hostPathVolume:
                hostPath: "sonar_cache"
                mountPath: "/root/.sonar/cache"
            yamls:                                       #请注意,此处从ConfigMap挂载了Nuget.Config,如不需要可以删除volumnMounts和volumns部分
            - "spec:\r\n  affinity:\r\n    nodeAffinity:\r\n      preferredDuringSchedulingIgnoredDuringExecution:\r\n      - weight: 1\r\n        preference:\r\n          matchExpressions:\r\n          - key: node-role.kubernetes.io/worker\r\n            operator: In\r\n            values:\r\n            - ci\r\n  tolerations:\r\n  - key: \"node.kubernetes.io/ci\"\r\n    operator: \"Exists\"\r\n    effect: \"NoSchedule\"\r\n  - key: \"node.kubernetes.io/ci\"\r\n    operator: \"Exists\"\r\n    effect: \"PreferNoSchedule\"\r\n  containers:\r\n  - name: \"dotnetcore\"\r\n    resources:\r\n      requests:\r\n        ephemeral-storage: \"1Gi\"\r\n      limits:\r\n        ephemeral-storage: \"10Gi\"\r\n    volumeMounts:\r\n    - name: config-volume\r\n      mountPath: /root/.nuget/NuGet/NuGet.Config\r\n      subPath: NuGet.Config\r\n  volumes:\r\n    - name: config-volume\r\n      configMap:\r\n        name: ks-devops-agent\r\n        items:\r\n        - key: NugetSetting\r\n          path: NuGet.Config\r\n  securityContext:\r\n    fsGroup: 1000\r\n "

修改并更新后,接下来需要去配置Jenkins使其生效。

打开你的Jenkins,点击“Manage Jenkins->Configuration as Code->Apply new configuration”。等待一会儿,如果没有报错,则配置完成。可以点击此页下的“View Configuration”检查配置是否生效。

此步骤其他细节还可以参考官方文档

使用

在KubeSphere的DevOps项目中,提前准备好git密钥。

建立一条流水线。编辑Jenkinsfile如下:(sonar分析部分可选,请自行替换其中变量)

pipeline {
  agent {
    node {
      label 'dotnetcore'
    }

  }
  stages {
    stage('拉代码') {
      steps {
        git(url: 'https://你的域名.com/你的项目.git', credentialsId: 'git密钥名', branch: 'master', changelog: true, poll: false)
      }
    }
    stage('代码分析') {
      steps {
        withSonarQubeEnv('sonar') {
          container('dotnetcore') {
            sh 'dotnet sonarscanner begin /k:"项目名" /n:项目名'
            sh 'dotnet publish -c Release 源码目录/项目名.csproj -o 源码目录/bin/publish/'
            sh 'dotnet sonarscanner end'
          }

        }

        waitForQualityGate 'true'
      }
    }
   
    stage('打镜像') {
      steps {
        container('dotnetcore') {
          sh '''cat > 源码目录/Dockerfile << EOF
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
WORKDIR /app
EXPOSE 80
COPY 源码目录/bin/publish/. .
ENTRYPOINT [ "dotnet","项目名.dll" ]
EOF
docker build -f 源码目录/Dockerfile -t 项目名:版本号 .'''
        }

      }
    }
    
  }
}

特别提醒

开启/关闭Devops系统、配置sonarqube等需修改CRD(自定义资源)下的ClusterConfiguration中的ks-install,该修改会导致ks-install服务工作对集群组件进行重新安装。从而导致jenkins的CasC配置和ks-jenkins-agent等配置被冲掉。如果修改了CRD导致集群组件重新安装,需要重新覆盖上述提到的devops系统相关的配置项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用KubeSphere3.0的DevOps系统构建dotnet core应用 的相关文章

随机推荐

  • 【线性代数】线性代数的几何意义

    目录 向量 线性变化与矩阵引入 矩阵乘法运算 行列式 逆矩阵 秩 点积 点积的几何理解 叉积 叉积的算术和几何意义 基变换 特征值和特征向量 函数与向量空间 线性代数可以说是学习计算机不可或缺的基础知识 计算机中很多复杂的运算都要依靠线性代
  • 网络安全-漏洞扫描

    利用漏洞扫描设备接入被测对象网络 通过指定 IP 地址范围等配置方法确保漏洞扫描设备仅对目标测试设备进行扫描 并生成扫描报告 扫描基于漏洞扫描设备内置漏洞知识库 通过采集信息 执行漏洞检测脚本对目标服务器 终端 的操作系统 应用程序 数据库
  • JVM的双亲委派模型

    定义与本质 类加载器用来把类文件加载到JVM内存中 从JDK1 2开始 类加载过程采用双亲委派模型 保证Java平台安全 父类委托的定义 一个类加载器在接到加载类请求的时候 首先不会去加载这个类 而是把这个类加载请求委托给父类去完成 近依次
  • TensorFlow 实战案例:CNN-LSTM 混合神经网络气温预测(附 Python 完整代码)

    大家好 今天和各位分享一下如何使用 Tensorflow 构建 CNN卷积神经网络和 LSTM 循环神经网络相结合的混合神经网络模型 完成对多特征的时间序列预测 本文预测模型的主要结构由 CNN 和 LSTM 神经网络构成 气温的特征数据具
  • 二进制格雷码与自然二进制码之间的转换

    什么是格雷码 格雷码 又叫循环二进制码或反射二进制码 格雷码是我们在工程中常会遇到的一种编码方式 它的基本的特点就是任意两个相邻的代码只有一位二进制数不同 二进制格雷码与自然二进制码的互换 1 二进制码转换成二进制格雷码 法则是保留二进制码
  • 基于深度学习的目标跟踪(Yolov3+deepsort)

    最近有个计数的项目刚好可以用到目标跟踪 先跑通测试一下 感觉还不错 项目代码在这里 主要参考的是一下两个项目改的 deep sort https github com nwojke deep sort keras yolov 3 https
  • 前端常用的一些正则表达式

    在线测试正则的网址 https regexr com 1 正整数 1 9 D 正整数不仅需要判断当前输入的全是数字 还需要保证第一位数字不是0 具体使用方式 直接在方法中写的话
  • Web前端学习(HTML)学习---下(表格标签,列表标签,表单标签)案例

    作者 旧梦拾遗186 专栏 C语言编程 小比特成长日记 前言 趁年轻 余额不足可以挣 电量不足可以充 时间匆匆不再回来 趁年轻就去多付出 不攀比 不抱怨 不计较 多付出 因为有一种努力叫靠自己 前一篇文章我们着重学习了HTML中的 标题标签
  • CSS--滑动门和过渡效果

    滑动门 滑动门出现的背景 制作网页时 为了美观 常常需要为网页元素设置特殊形状的背景 比如微信导航栏 有凸起和凹下去的感觉 最大的问题是里面的字数不一样多 咋办 为了使各种特殊形状的背景能够自适应元素中文本内容的多少 出现了CSS滑动门技术
  • Blender常用快捷键整理

    物体操作快捷键 即选中物体 G键 移动物体 R键 旋转物体 S键 缩放物体 移动 旋转或缩放物体时 按下X Y或Z键 按X Y或Z轴方向移动 旋转或缩放 TAB键 切换为编辑模式 CTRL A 弹出应用菜单 物体模式旋转缩放后应用旋转与缩放
  • 人工智能在通信领域的应用

    人工智能的出现使得各个行业都有了新的发展方向 通过和人工智能结合 使得自己的行业打破传统的方式 以一种新的姿态进入人们的视线中 现在我们都离不开通信技术 很多人对于人工智能给通信领域带来什么的改变 在这篇文章中我们会详细的介绍这一问题 大家
  • 基于opencv的车道线识别 方法二(极易实现(python))

    基于opencv的车道线识别 方法二 效果图 语言 平台 所需的库 步骤及原理 1 导入库 2 二值化 3 提取感兴趣区域 4 剔除噪点 5 找出值不为零的点 即车道线 并将其绘制在原图上 完整代码 效果图 语言 python 平台 pyc
  • 关于FFmpeg里的GPL和LGPL协议

    参考博文 谢谢博主的分享 http www cnblogs com findumars p 3556883 html GPL介绍 我们很熟悉的Linux就是采用了GPL GPL协议和BSD Apache Licence等鼓励代码重用的许可很
  • python并发编程学习笔记--单线程,多线程,多进程 day06

    Python并发编程是指同时处理多个任务的技术 包括单线程 多线程和多进程三种方式 1 单线程 单线程是指在一个进程中只有一个线程在执行任务的情况 虽然只有一个线程在执行任务 但可以使用异步编程模型来实现并发操作 从而达到提高程序效率的目的
  • 置信度传播算法(Belief Propagation)

    基础知识 条件概率 Conditional Probability 相互独立时 p A B p A 贝叶斯规则 贝叶斯网络 Bayesian Network 定了一个独立的结构 一个节点的概率仅依赖于它的父节点 贝叶斯网络适用于稀疏模型 即
  • 【Angular】——无限级下拉列表框

    前言 前段时间换了新框架 将前后端分离 对Angular2有点感兴趣 所以参与一起封装组件 在小5的帮助下 学会了 好多东西 这里总结下封装的无限级下拉列表框 dropdownlist ts import Component OnInit
  • IDEA 调试小技巧

    条件断点 循环中经常用到这个技巧 比如 遍历中 想让断点停在某个特定值 见上图 在断点位置 右击会弹出一个界面 在condition中填写断点条件 在调试的时候 断点会自动在断点条件 i 6 为 true时候停下 跳过为false的条件 回
  • Java对象与byte[]数组之间的相互转化,压缩解压缩操作

    原文 http blog csdn net NsdnResponsibility article details 51028739 comments 下面介绍一下java对象之间和byte 数组之间的相互转化 并对byte 数据进行压缩操作
  • 数学的回忆(零)——傅立叶

    一 什么是频域 从我们出生 我们看到的世界都以时间贯穿 股票的走势 人的身高 汽车的轨迹都会随着时间发生改变 这种以时间作为参照来观察动态世界的方法我们称其为时域分析 而我们也想当然的认为 世间万物都在随着时间不停的改变 并且永远不会静止下
  • 如何使用KubeSphere3.0的DevOps系统构建dotnet core应用

    如何使用KubeSphere3 0的DevOps系统构建dotnet core应用 因KubeSphere的DevOps系统官方未提供 net core的ci cd解决方案 需要自己进行DIY 现把实施过程记录下来 供需要的小伙伴自取 前提