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

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

10.引入elk日志采集系统

待完善

11.引入sonar ,待完善

一、

以上是 mac+docker+jenkins+gitlab+k8s+springboot从0搭建cicd 的全部内容, 来源链接: utcz.com/z/515843.html

回到顶部