使用kubesphere测试devops-cicd流水线

一、基础环境

机器配置:

kvm虚拟机(8C12GB)资源有限只能搞这个配置

这里资源有限采用单机模式,ip地址192.168.20.43 

环境变量设置
#/etc/profile   //新增如下

export KKZONE=cn

#source /etc/profile
kubesphere安装方式

./kk create cluster --with-kubernetes v1.21.14 --with-kubesphere v3.3.2

二、初始化的配置

1、开启"应用商店"和"devops" 

平台管理--集群管理--定制资源定义--搜索(clusterconfiguration)点击进去--ks-installer(编辑YAML)

  openpitrix:
    store:
      enabled: true

----------------

  devops:
    enabled: true
    jenkinsMemoryLim: 4Gi
    jenkinsMemoryReq: 2Gi
    jenkinsVolumeSize: 4Gi

//devops的内存资源根据实际情况设置,不然机器会卡死

点击保存之后

在master上执行
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
直到安装完成

2、创建自己的企业空间

工作台--企业空间(创建)--我这里创建(yiyouhui)

3、创建操作用户(这个权限要谨慎),不要以为权限高就为所欲为,权限高了反而啥也看到不到,这个是比较坑的地方,这里创建两个用户

3.1  project-admin
3.2  project-regular

 三、添加应用仓库

在自己的空间下创建应用仓库

工作台--yiyouhui--应用管理--应用仓库---添加(Helm Charts - KubeSphereicon-default.png?t=N7T8https://charts.kubesphere.io/main

四、创建gitlab和harbor仓库

 用project-regular用户重新登录kubesphere

项目--创建项目(我这里用dayi-devops)--创建完成之后点击项目名字进去--应用负载--应用--创建

1、gitlab

1.1 访问应用负载下的应用,然后点击创建

1.2 在出现的对话框中,选择从应用模板。

1.3 从下拉菜单中选择 main,然后点击 gitlab

1.4 在应用信息选项卡和Chart 文件选项卡,可以看到控制台的默认配置。点击安装继续。

1.5 在基本信息页面,可以看到应用名称、应用版本以及部署位置。本教程使用 4.2.3 [13.2.2] 版本。点击下一步继续。

1.6 在应用设置页面,使用以下配置替换默认配置,然后点击安装。

global:
  hosts:
    domain: dayi-devops.svc.cluster.local
gitlab-runner:
  install: false
gitlab:
  webservice:
    helmTests:
      enabled: false

###dayi-devops 指的是部署 GitLab 的项目名称,请确保使用您自己的项目名称。

1.7 等待 GitLab 正常运行。

1.8 访问工作负载,可以看到为 GitLab 创建的所有部署和有状态副本集。(可能需要过一段时间才能看到所有部署和有状态副本集正常运行。)

1.9 获取hosts信息(点击应用gitlab-jro1w3) 进去

1.10 绑定hosts信息

192.168.20.43 gitlab.dayi-devops.svc.cluster.local

1.11 获取登录密码(默认是root用户的)

选择配置 > 保密字典,在搜索栏输入 gitlab-initial-root-password,然后按下键盘上的回车键来搜索密钥。

点击密钥访问其详情页,然后点击右上角的 icon 查看密码。请确保将密码进行复制。

1.12 登录上传(如下的示例的代码,当然也可以换成自己的应用的代码)
https://codeload.github.com/kubesphere/devops-java-sample/zip/refs/heads/master

1.13 这样gitlab就设置完毕了

 2、harbor

1.1 访问应用负载下的应用,然后点击创建

1.2 在出现的对话框中,选择从应用模板。

1.3 从下拉菜单中选择 main,然后点击 harbor

1.4 在应用信息选项卡和Chart 文件选项卡,可以看到控制台的默认配置。点击安装继续。

1.5 在应用设置页面,使用以下配置替换默认配置,然后点击安装。(做如下变更)

expose:
  type: nodePort     //由ingress换成nodePort
  tls:  
    enabled: false    //tls关闭
    certSource: auto
    auto:
      commonName: 192.168.20.43   //我这里写的是master1的ip地址
 
--------------------------------------------------
externalURL: 'http://192.168.20.43:30002'  //设置成自己的ip地址,端口一般用30002
--------------------------------
 
其他的参数用默认的即可
切记方式的时候的地址要和externalURL定义的地址是一样的,不然是无法登录的
默认的登陆账号:admin,密码:Harbor12345

1.6 点击安装直到安装完成即可

1.7 上传测试的镜像

1、修改docker配置支持http访问访问harbor
[root@master1 ~]# cat /etc/docker/daemon.json
{
  "log-opts": {
    "max-size": "5m",
    "max-file":"3"
  },
  "registry-mirrors": ["https://dgxy4fzg.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries":["192.168.20.43:30002"]
}
2、systemctl restart docker.service
这个步骤会触发整个kubesphere和k8s环境重启,需要等待一下所有步骤完成

3、上传镜像
#docker pull openjdk:8-jre-alpine
#docker login -u 'admin' -p 'Harbor12345'  http://192.168.20.43:30002
#docker tag f7a292bbb70c 192.168.20.43:30002/library/java:openjdk-8-jre-alpine
#docker push 192.168.20.43:30002/library/java:openjdk-8-jre-alpine

五、master主机增加gitlab和harbor的hosts信息

192.168.20.43 gitlab.dayi-devops.svc.cluster.local
192.168.20.43 harbor.dayi-devops.svc.cluster.local

六、修改coredns增加hosts信息

#kubectl edit configmap coredns -n kube-system -o yaml


#####

        hosts {
          192.168.20.43  gitlab.dayi-devops.svc.cluster.local
          192.168.20.43  harbor.dayi-devops.svc.cluster.local
          fallthrough
        }

####

这个变更需要几分钟,等待完成之后再运行devios-cicd流水线

七、创建测试的项目(这个项目名字需要和流水线中配置的一样)

这里是 kubesphere-sample-dev

这个是在gitlab里定义的(根据自己的实际情况调整,就是这个命名空间)

八、创建流水线

参考的是官方的文档:使用图形编辑面板创建流水线

步骤就不一一的赘述了

需要注意的是在高级设置里这么写

1、字符串:
REGISTRY  http://192.168.20.43:30002    //镜像仓库地址
2、字符串(比如我的地址192.168.20.43:30002/library/openjdk-8-jre-alpine:SNAPSHOT-19)
DOCKERHUB_NAMESPACE   library     //您的 Docker Hub 帐户或该帐户下的组织名称。
3、字符串
APP_NAME    openjdk-8-jre-alpine    //应用名称。

需要注意的是提前创建好凭证

devops---自己的项目---Devops项目设置--凭证
1、demo-kubeconfig
类型选择:kubeconfig即可
2、harbor-id
类型选择:用户名和密码
正常写harbor服务的账号密码即可
3、gitlab-id
类型选择:用户名和密码
正常写gitlab服务的账号密码即可

需要注意的是 需要执行mvn命令的步骤,首先要“指定容器”,里边填写maven

我这里主要分如下步骤

1、Checkout SCM

代理:none
git
url   http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample.git
凭证 ID   gitlab-id
branch   master

2 unit test
指定容器
  maven
shell 脚本
script   mvn clean -gs `pwd`/configuration/settings.xml test
3、Build and Push
任务
指定容器
  maven
shell 脚本
script   mvn -Dmaven.test.skip=true clean package
shell 脚本
script   docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .
添加凭证
凭证 ID   harbor-id
密码变量   DOCKER_PASSWORD
用户名变量   DOCKER_USERNAME
shell 脚本
script   echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
shell 脚本
script   docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER

4、Artifacts
任务
保存制品
制品   target/*.jar

5、Deploy to Dev
任务
审核
message   project-admin
审核者   
指定容器
  maven
添加凭证
凭证 ID   demo-kubeconfig
variable   KUBECONFIG_CONTENT
shell 脚本
script   mkdir ~/.kube echo "$KUBECONFIG_CONTENT" > ~/.kube/config envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f - envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -

附加Jenkinsfile

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('Checkout SCM') {
      agent none
      steps {
        git(url: 'http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample.git', credentialsId: 'gitlab-id', branch: 'master', changelog: true, poll: false)
      }
    }

    stage('unit test') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean -gs `pwd`/configuration/settings.xml test'
        }

      }
    }

    stage('Build and Push') {
      agent none
      steps {
        container('maven') {
          sh 'mvn -Dmaven.test.skip=true clean package'
          sh 'docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .'
          withCredentials([usernamePassword(credentialsId : 'harbor-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER'
          }

        }

      }
    }

    stage('Artifacts') {
      agent none
      steps {
        archiveArtifacts 'target/*.jar'
      }
    }

    stage('Deploy to Dev') {
      agent none
      steps {
        input(message: 'project-admin', submitter: '')
        container('maven') {
          withCredentials([kubeconfigContent(credentialsId : 'demo-kubeconfig' ,variable : 'KUBECONFIG_CONTENT' ,)]) {
            sh '''mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f -
envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -
'''
          }

        }

      }
    }

  }
}

九、运行流水线即可

退出当前用户,登录 project-admin用户审核流程就行了

最后验证服务就行了  

注意事项: 

1、创建gitlab和harbor服务的时候都采用应用模板即可,gitlab创建是时候空间名字注意替换,harbor注意不要开tls,并且配置nodePort模式

2、各个节点包括主节点上,都要配置hosts信息+docker的配置都需要修改

3、codedns的配置千万不要遗漏,比如在流水线的时候会报错,gitlab的域名无法解析

4、流水线报错mvn命令不存在的原因,是创建流水线步骤的时候没指定容器填写maven,这个千万不可以遗漏

5、示例代码的deployment是有问题的,需要根据实际情况调整,比如
http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample/-/blob/master/deploy/dev-ol/devops-sample.yaml

image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME$BUILD_NUMBER
去掉多余的"-"线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完颜振江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值