前面的文章中已经涵盖了大部分的互联网开发中使用的工具和中间件的安装,给大家一个印象并在自己做个简单的测试使用应该没有问题。后面我们会讲到具体在项目中的使用。这里我们先阐述下自动化运维的准备工作

我们大体的思路是通过git的webhook触发jenkins操作。Jenkins执行maven的操作把java项目打包放到k8s私有仓库中.执行java项目下的dockerfile打成镜像。K8s执行运行执行镜像的脚本。项目运行在k8s的项目编排成功。

 

1.创建docker私有镜像仓库

执行命令docker pull registry拉取镜像

通过上面的镜像创建一个docker容器,命令如下:

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 验证私有镜像仓库是否启动成功。执行结果如下图所示:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台

 

修改docker私有镜像地址为我们刚才启动的服务的地址。

使用命令:vim /etc/docker/daemon.json在该文件下放入如下的内容

{"insecure-registries":["192.168.218.138:5000"]}

执行下面的命令重启docker

systemctl daemon-reload

systemctl restart docker

因为restart会造成容器停掉

我们使用命令 docker start f66 启动刚才停掉的容器

使用docker tag registry 192.168.218.138:5000/registry:v1打tag

把刚才打好的tag的image push到私有镜像仓库里面.命令如下:

docker push 192.168.218.138:5000/registry:v1

验证私有镜像是否启动成功

使用命令:curl http://127.0.0.1:5000/v2/_catalog 结果如下:

Java自动化部署windows平台 java自动化运维_运维_02

 

2.通过webhook关联gitlab和jenkins

在jenkins上新增一条流水线:

点击jenkins左上角新建任务如下图所示:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_03

Java自动化部署windows平台 java自动化运维_运维_04

 

点击确定后如下图所示:

Java自动化部署windows平台 java自动化运维_jenkins_05

 

在gitlab生成access token:

打开http://192.168.218.138:10004请求我们gitlab的地址。

我们第一次打开的时候 会让我们重置登录密码。(我设置的为yusong*******)

然后使用root用户登录如下图所示:

Java自动化部署windows平台 java自动化运维_jenkins_06

 

分别点击用户设置->访问令牌

点击之后填写相关信息如下图所示:

Java自动化部署windows平台 java自动化运维_docker_07

 

点击下面的create personal access token 生成token.如下图所示:

生产的token为21czi-g_kvsYepTN78Fk。如下图:

Java自动化部署windows平台 java自动化运维_git_08

 

jenkins配置访问git的访问凭证:

打开http://192.168.218.138:10002/jenkins/如下图所示:

Java自动化部署windows平台 java自动化运维_git_09

 

依次点击jenkins->系统管理.拉到下方找到系统配置。如下图所示:

Java自动化部署windows平台 java自动化运维_docker_10

 

点击系统配置。如下图所示:

Java自动化部署windows平台 java自动化运维_运维_11

 

下拉找到gitlab 如果没有请自行安装gitlab的插件。如下图所示:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_12

 

依次填写name和url然后点击添加选择jenkins如下图所示:

Java自动化部署windows平台 java自动化运维_git_13

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_14

 

启动api token 为刚才在gitlab中生产的token.完成之后点击添加。如下图所示:

Java自动化部署windows平台 java自动化运维_docker_15

 

点击右下角的test connection 发现一直提示no route to host

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_16

 

这个是因为网络不通。经过本人的调试发现两个都是docker镜像的时候不能使用宿主机的ip和做了映射的端口号。修改Gitlab host URL的值为http://172.17.0.4:8080。该值的来源为gitlab服务器的IP如下图所示:

Java自动化部署windows平台 java自动化运维_jenkins_17

 

修改了请求的地址 我们再次点击的时候 如下图:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_18

 

点击左下角的保存。经过以上的操作,jenkins访问gitlab这条单线通了,接下来需要配置gitlab触发jenkins这个方向畅通的配置了。

 

gitlab配置webhook:

我们点开之前创建的k8s-pipeline项目

Java自动化部署windows平台 java自动化运维_git_19

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_20

Java自动化部署windows平台 java自动化运维_docker_21

 

点击构建触发器页面会滚动到到构建触发器的位置.我们勾选如下图所示:

Java自动化部署windows平台 java自动化运维_jenkins_22

 

点击高级如下图所示:

Java自动化部署windows平台 java自动化运维_docker_23

 

点击右下角generate生成token。Token的值如下:

e19bcc36304c5e595f3395538eb19efb

Java自动化部署windows平台 java自动化运维_docker_24

 

新增一个webhook:

我们打开gitlab并用管理员帐号登录。create一个demo的项目

点开我们刚才创建的demo项目依次点击设置->集成如下图所示:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_25

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_26

 

http://172.17.0.4:8080/jenkins/project/k8s-gitlab

填写好相关的配置往下拉点击add webhook 如下图所示

(如果该地址为局域网的地址add会失败说补允许本地地址的添加)

我们先点击管理中心 如下图所示:

Java自动化部署windows平台 java自动化运维_git_27

 

依次点击设置->网络->外发请求的展开->allow request to the local network from hooks and services.如下图所示:

Java自动化部署windows平台 java自动化运维_Java自动化部署windows平台_28

 

再次点击add webhook如下图

Java自动化部署windows平台 java自动化运维_git_29

 

点击test右边的三角如下图:

Java自动化部署windows平台 java自动化运维_git_30

 

选择push events如下图所示:

Java自动化部署windows平台 java自动化运维_运维_31

 

因为我们的项目是刚创建的项目还没有提交记录。我们在ide中新建一个demo的项目并提交到刚才在gitlab中创建的项目。请自行操作

我们再次进行push events的操作发现

Java自动化部署windows平台 java自动化运维_docker_32

 

这个时候 说明我们可以触发提交的事件了。

流水线的创建(pipeline):

回到jenkins点击流水线如下图所示:

Java自动化部署windows平台 java自动化运维_jenkins_33

 

我们选择pipeline script from SCM

scm 下选择选择git.我们填写好相关的配置如下图:

Java自动化部署windows平台 java自动化运维_docker_34

 

点击左下角的保存

dockerfile的创建:

在demo的项目的根目录下创建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
Jenkinsfile的创建 文件内容如下:
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 '}}
 }
}

k8s 创建pod文件的创建内容如下:

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

我们提交代码发现jenkins开始build了。但是构建未成功。这个是因为dockfile和流水的问题。如下图所示:

 

Java自动化部署windows平台 java自动化运维_docker_35