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以及插件过程已经完成了。

  •  

    mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第1张图片

    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上新增一条流水线

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第2张图片

4.2 在gitlab生成access token

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第3张图片

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

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第4张图片

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第5张图片

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第6张图片
 

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

4.4 gitlab配置webhook

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第7张图片

点击advanced,

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第8张图片

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第9张图片

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第10张图片

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第11张图片

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,流水线实时拉取,这种是可以在代码项目中更改,不用实时更改流水线的配置。

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第12张图片

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

mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd_第13张图片

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

你可能感兴趣的:(mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd)