mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd

本文采用brew安装的jenkins;docker利用镜像安装的gitlab;利用docker利用镜像搭建的本地私有镜像仓库,利用k8s搭建了一套jenkins流水线来实现本地提交代码触发微服务部署的一套流水线。

1. jenkins的安装

jenkins安装的方式有很多种,可以在mac系统上利用brew install jenkins来安装,也可以利用docker image的方式安装,当然也可以采用k8s的方式来安装;

  • homebrew的方式:
    brew install jenkins #安装
    brew services start jenkins #启动

    在浏览器输入http://localhost:8080/或者http://本机ip:8080/即可验证jenkins是否ok,会弹出一个让你输入密码的页面,密码在这个地方查找:

  •  cat secrets/initialAdminPassword

    在Jenkins->Manage jenkins->Avaiable->search搜索框输入pipeline,来安装pipeline插件和gitlab插件,也可以再多安装一个blue ocean,这样流水线的ui会好看一些,安装插件的时间会比较就一些,需要耐心等待。

  • 插件安装完之后,点击新建一个流水线,图是这样的,这就代表安装jenkins以及插件过程已经完成了。

  •  

    2.gitlab的安装

这块采用的是docker+image的方式安装的:

$     docker pull gitlab/gitlab-ce #拉取镜像
$ sudo docker run -d \
    --hostname xxxx.xxxx.xx \
    --name gitlab \
    --restart always \
    --publish 30001:22 --publish 30000:80 --publish 30002:443 \
    --volume $HOME/gitlab/data:/var/opt/gitlab \
    --volume $HOME/gitlab/logs:/var/log/gitlab \
    --volume $HOME/gitlab/config:/etc/gitlab \
    gitlab/gitlab-ce #运行

运行成功后,需要在浏览器上输入http://localhost:30000来访问搭建好的gitlab,此时可以创建一个超级管理员用户,和一个project

3.私有镜像仓库的安装

$ docker pull registry #

$ docker run -d  -v /Users/hfguan/self/docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name private-registry registry #运行

$ curl http://127.0.0.1:5000/v2/_catalog 验证私有仓库是否成功:

{"repositories":[]}

在push镜像到私有仓库之前,先要修改docker的daemon.json文件,其中192.168.1.8是本机的ip

修改daemon.json文件
{
    "insecure-registries":["192.168.1.8:5000"],
}
docker tag registry 192.168.1.8:5000/registry:v1 #打tag
docker push 192.168.1.8:5000/registry:v1 #把刚才打好的tag的image push到私有镜像仓库里面
$ curl http://127.0.0.1:5000/v2/_catalog  #访问仓库,查看刚才的镜像是否已经成功推动到镜像仓库里


{"repositories":["registry"]}

4. gitlab与jenkins有关webhook钩子的关联

4.1 在jenkins上新增一条流水线

4.2 在gitlab生成access token

在User Settings->Access tokens->输入token的名字,勾选权限,点击Create personal access token,生成token后将token 保存下来,为下面jenkins配置做准备。

4.3 jenkins配置访问gitlab的访问凭证

在Jenkins->Manage jenkins-> configure system->gitlab 

添加完gitlab api token,在Gitlab设置界面“Credentials”中选择前面添加的token,然后点击“Test Connection”测试是否成功。测试成功后保存。


 

jenkins访问gitlab这条单线通了,接下来需要配置gitlab触发jenkins这个方向畅通的配置了。

4.4 gitlab配置webhook

点击advanced,

新增webhook,在gitlab的刚才创建的project->Setting->webhooks

创建成功后点击test,测试连通性

返回200,代表已经通了,此时jenkins会触发一次pipeline

5. pipeline的创建

5.1 pipeline可以在jenkins的pipeline模块编写,大致是这种:

pipeline{
    agent any
    stages{
        stage('Build'){
            steps{
                echo 'building...'
            }
        }
        stage('Test'){
            steps{
                echo 'Test...'
            }
        }
        stage('Deploy'){
            steps{
                echo 'Deploy...'
            }
        }
    }
}

#来代表从编译,测试,部署的整个过程

5.2 也可以是在微服务中新增一个jenkinsfile,流水线实时拉取,这种是可以在代码项目中更改,不用实时更改流水线的配置。

6. k8s集群的搭建

这里采用的是minikube来搭建单node的只有master节点的k8s集群


$ brew install minikube #安装minikube
安装虚拟机virtualbox
$ minikube start --vm-driver=virtulbox #利用minikube启动一个k8s的单node集群
$ minikube status #查看集群状态
m01
host: Running
kubelet: Running
apiserver: Running

kubeconfig: Configured
安装k8s的命令行工具kubectl

brew install kubectl
kubectl version #查看安装成功与否

7.创建一个springboot项目,dockerfile文件的编写

搭建微服务很简单,此处略去不表,在微服务的根路径下创建一个Dockerfile,项目地址:https://github.com/gholly/docker-scaffold.git

有关如何写dockerfile,可参照:如何编写Dockerfile

# openjdk:lastest 可从https://hub.docker.com/官方镜像仓库去查找你想要的镜像
FROM  openjdk:11
COPY ./build/libs/scaffold-1.0-SNAPSHOT.jar docker-scaffold.jar
#JAVA_OPTS 是用来设置JVM相关运行参数的变量
ENV JAVA_OPTS="-Dserver.port=8081"
EXPOSE 8081
ENTRYPOINT exec java $JAVA_OPTS -jar docker-scaffold.jar

5.jenkinsfile的编写

在微服务中创建一个Jenkinsfile的文件,来管理流水线的各个阶段分别做什么,具体可参照pipeline语法的学习:pipeline语法的学习

此处列出一个初版,包含了编译,打镜像,push镜像,利用k8s创建一个资源,待优化:

pipeline {
 agent any

 stages {
    stage('Build'){
        steps{
             sh './gradlew clean build'
        }
    }

    stage('Build Docker image'){
            steps{
          sh '/usr/local/bin/docker build -f ./Dockerfile .  -t 192.168.1.8:5000/scaffold:v5'
          }
    }

    stage('Docker push image'){
            steps{
          sh '/usr/local/bin/docker push 192.168.1.8:5000/scaffold:v4'
          }
    }

    stage('kubectl create pod'){
             steps{
              sh '/usr/local/bin/kubectl apply -f ./deploy/application.yaml '
              }
    }




 }
}

9. k8s的yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backnd
  labels:
    name: backnd
spec:
  replicas: 2
  selector:
    matchLabels:
      name: backnd

  template:
    metadata:
      labels:
        name: backnd
    spec:
      containers:
        - name: scaffold
          image: 192.168.1.8:5000/scaffold:v5
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8081
      imagePullSecrets:
        - name: regsecret
---
apiVersion: v1
kind: Service
metadata:
  name: scaffold
spec:
  type: NodePort
  ports:
    - port: 8081
      nodePort: 30011
      targetPort: 8081
  selector:
    name: backnd

10. 联调:

将本地创建的项目与gitlab上刚创建的项目尽享绑定,提交代码,然后在jenkins查看流水线是否被触发:

绑定关系:

git remote rename origin old-origin01
   git remote add origin http://localhost:30000/gt/pt.git
  git push -u origin --all
  git push -u origin --tags

此时流水线已经搭建成功啦~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DockerJenkinsGitLab、Maven、Harbor和Spring Boot是一些常用的IT工具和技术,可以用于实现自动化构建和部署。 Docker是一个开源的容器化平台,可以将应用程序及其依赖项打包到容器中,从而实现应用程序的快速部署和隔离。使用Docker可以方便地创建、分享和管理应用程序的容器化版本。 Jenkins是一个开源的持续集成和持续交付工具,可以帮助团队自动化构建、测试和部署应用程序。使用Jenkins可以通过配置和管理各种构建和部署任务,从而实现自动化的软件开发流程。 GitLab是一个基于Git的代码托管和协作平台,可以帮助团队协同开发、管理代码和进行版本控制。使用GitLab可以方便地管理代码仓库、进行代码审查和版本管理。 Maven是一个软件项目管理和构建工具,可以帮助团队自动化构建、测试和部署Java项目。使用Maven可以方便地管理项目依赖、编译代码、运行单元测试等构建任务。 Harbor是一个开源的企业级Docker镜像仓库,用于管理和存储Docker镜像。使用Harbor可以方便地管理镜像的推送、拉取和版本控制。 Spring Boot是一个轻量级的Java开发框架,可以帮助开发者快速构建和部署基于Spring的应用程序。使用Spring Boot可以简化项目配置和管理,提高开发效率。 将这些工具结合使用,可以实现自动化构建和部署。例如,可以使用Jenkins配置一个定时任务,当代码提交到GitLab时,Jenkins会自动触发构建任务。构建任务可以使用Maven编译、打包和测试应用程序,然后使用Docker将应用程序打包成容器镜像,并推送到Harbor中。最后,使用Docker将应用程序部署到服务器上进行运行。这样,我们就可以实现应用程序的自动化构建和部署,提高开发和交付效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值