返回顶部
首页 > 资讯 > 后端开发 > Python >Jenkins+harbor+gitlab+k8s 部署maven项目
  • 425
分享到

Jenkins+harbor+gitlab+k8s 部署maven项目

项目harborJenkins 2023-01-31 08:01:24 425人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

Maven项目部署流程图如下:   环境介绍操作系统ip角色版本ubuntu-16.04.4-server-amd64192.168.10.122jenkins+harborJenkins 2.176.2,ha

Maven项目部署流程图如下:

1.png

 

 

 

环境介绍

操作系统ip角色版本
ubuntu-16.04.4-server-amd64192.168.10.122jenkins+harborJenkins 2.176.2,harbor 1.8.1
ubuntu-16.04.4-server-amd64192.168.10.134gitlabgitlab-ce_12.1.4
ubuntu-16.04.4-server-amd64192.168.10.130k8s masterkubernetes 1.15.2
ubuntu-16.04.4-server-amd64192.168.10.131k8s nodekubernetes 1.15.2

 

 

 

 

 

 

 

由于资源紧张,Jenkins+harbor合并为一台了。实际上,应该是要单独部署的。

k8s安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11317844.html

 

gitlab安装,请参考链接:

Https://www.cnblogs.com/xiao987334176/p/11329018.html

 

harbor安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11326467.html

 

Jenkins安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11323795.html

 

注意:Jenkins安装之后,还需要做以下配置。否则无法实现本文章的功能!!!

Jenkins基于https的k8s配置,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11338827.html

 

GitLab+Jenkins持续集成,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11425560.html

 

Jenkins配置maven,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11433636.html

 

 首先从GitHub上面,找一个基于maven的项目,地址如下:

https://github.com/solochen84/SpringBootDemo

使用git客户端,下载此项目代码

 

创建项目

登录gitlab,创建一个项目springbootdemo

1.png

 

 

点击 设置--> 成员

1.png

 

 

添加2个成员,一个是jenkins用户,用来拉取代码的。一个是我,用来提交代码的。

注意:我的账号,权限要高一些,可以直接提交到master分支。

1.png

 

 

将github下载的代码,提交到刚刚创建的项目中。效果如下:

1.png

 

 

创建jenkins用户

登录到harbor后台,点击创建用户

1.png

 

 

注意,每一项都填写一项。尤其是密码,必须符合密码复杂性要求。

1.png

 

创建项目

点击新建项目

1.png

 

 

输入名字,java。这就是私有项目。

1.png

 

 点击java

1.png

 

 

点击成员-->用户

1.png

 

 

输入jenkins,会有提示的。角色选择 开发人员。

1.png

 

使用jenkins执行shell命令时,可能会出现权限不足的情况。

查看jenkins默认用户

cat /etc/default/jenkins

内容如下:

# pulled in from the init script; makes things easier.
NAME=jenkins

# arguments to pass to java

# Allow graphs etc. to work even when an X server is present
JAVA_ARGS="-Djava.awt.headless=true"

#JAVA_ARGS="-Xmx256m"

# make jenkins listen on IPv4 address
#JAVA_ARGS="-Djava.net.preferIPv4Stack=true"

PIDFILE=/var/run/$NAME/$NAME.pid

# user and group to be invoked as (default to jenkins)
JENKINS_USER=$NAME
JENKINS_GROUP=$NAME
...

可以发现JENKINS_USER和JENKINS_GROUP变量的值是jenkins

 

修改默认用户为root

将下面2个变量,修改为root

JENKINS_USER=root
JENKINS_GROUP=root

 

重启jenkins服务

service jenkins restart

 

为什么要和k8s master做ssh免密呢?因为jenkins需要登录到k8s master,做一些pod操作。

生成秘钥

登录到jenkins服务器,生成秘钥

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

 

copy秘钥

ssh-copy-id 192.168.10.130

 

测试root免密

ssh 192.168.10.130

如果没有提示输入密码,说明成功了!

 

修改Docker配置文件,添加harbor地址

vim /etc/docker/daemon.JSON

内容如下:

{"insecure-reGIStries": ["192.168.10.122"]}

 

重新加载docker配置

/etc/init.d/docker reload

 

测试登录

root@ubuntu:~/docker_dir# docker login 192.168.10.122 -u jenkins -p Jenkins@1234
WARNING! Using --passWord via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

如果出现

Error response from daemon: Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused

表示 /etc/docker/daemon.json 文件修改不正确

 

新建任务

登录到jenkins后台,点击 新建Item

输入名称,选择构建一个maven项目。注意:任务名称最好是项目名,因为下面的deploy_docker.sh脚本,会调用这个变量。

1.png

 

设置参数化构建

丢弃旧的构建,保留2天

1.png

 

 

设置源代码

输入仓库下载地址,选择用户root

1.png

 

设置maven构建命令

输入命令:clean package

1.png

 

mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。

package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

 

jar包打包成docker镜像并推送

执行shell命令

build完成之后,选择执行shell命令

1.png

 

 

将下面的内容,贴过去

#!/bin/bash

jarName=spring-boot-demo-0.0.1-SNAPSHOT.jar
jarFolder=$JOB_NAME
harborPro=java
projectName=$JOB_NAME

docker_path=${WORKSPACE}

cp ${WORKSPACE}/target/${jarName} ${docker_path}
bash -x /root/docker_dir/deploy_docker.sh ${harborPro} ${projectName} ${docker_path} ${jarName}

 

内容解释:

jarName jar包的文件名,名字随便

jarFolder jar包的文件夹

harborPro harbor里面的项目,在上面步骤中,创建java私有项目。

projectName 项目名,名字随便

docker_path docker命令的工作目录

 

最后一步,会执行一个shell脚本。下面说到!

 

效果如下:

1.png

 

定义shell脚本

登录到jenkins服务器,创建目录

mkdir /root/docker_dir

 

编辑deploy_docker.sh脚本

cd /root/docker_dir/
vim deploy_docker.sh

内容如下:

#!/bin/bash
# maven $workspace $jarname
# ${harborPro} ${projectName} ${docker_path} ${jarName}

set -e
harbor_project=$1
projectName=$2
docker_path=$3
appName=$4

# harbor认证用户
user_name=jenkins
password=Jenkins@1234

# harbor地址以及tag
tag=$(date +%s)
harbor_server=192.168.10.122
server_path=${harbor_server}
taget_image=${projectName}:${tag}
#${BUILD_NUMBER}
echo ${taget_image}

# 登录docker
cd ${docker_path}
sudo docker login ${harbor_server} -u ${user_name} -p ${password}

# 生成镜像并推送到harbor,最后删除本地镜像
sudo docker build --build-arg app=${appName} -t ${taget_image} .
sudo docker tag ${taget_image} ${server_path}/${harbor_project}/${projectName}
echo "The name of image is ${server_path}/${harbor_project}/${projectName}"
sudo docker push ${server_path}/${harbor_project}/${projectName}:latest
sudo docker rmi -f $(docker images|grep ${projectName}|grep ${tag}|awk '{print $3}'|head -n 1)

 

添加执行权限

chmod 755 /root/docker_dir/deploy_docker.sh

 

yaml文件拷贝到k8s master上并运用应用

k8s master 操作

登录到k8s master,创建目录

mkdir kube-conf

 

删除gitlab springbootdemo项目中的kube.yaml,新增2个yaml文件。

ph-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: ph-service
spec:
  type: NodePort
  ports:
  - name: ph
    port: 8080
    nodePort: 31002
    targetPort: 8080
    protocol: TCP
  selector:
    app: ph


ph-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: ph-rc
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: ph
    spec:
      imagePullSecrets:
        - name: harborsecret
      containers:
        - name: ph
          image: 192.168.10.122/java/ph:latest
          imagePullPolicy: Always
          ports:
          - containerPort: 8080
          env:
            - name: key
              value: "value"


将2个yaml文件提交到gitlab

 

k8s 生成imagePullSecrets,请参考以下链接

https://www.cnblogs.com/xiao987334176/p/11434326.html

注意:使用docker登录用户时,指定jenkins

docker login 192.168.10.122 -u jenkins -p Jenkins@1234

 

jenkins操作

登录到jenkins服务器,新增重启应用脚本

cd /root/docker_dir
vim reboot_app.sh

内容如下:

#!/bin/bash
MASTER="192.168.10.130"
CONF_DIR="/root/kube-conf"
ProJ=${JOB_NAME}

scp ${WORKSPACE}/*.yaml ${MASTER}:${CONF_DIR}
# Pod running process
RUN=$(ssh $MASTER kubectl get po|grep -w ${ProJ}|wc -l)
if [ $RUN -eq 0 ];then
        ssh ${MASTER} kubectl apply -f ${CONF_DIR}/${ProJ}-rc.yaml
        ssh ${MASTER} kubectl apply -f ${CONF_DIR}/${ProJ}-service.yaml
else
        # Delete pod
        podname=$(ssh ${MASTER} kubectl get po|grep -w ${ProJ}|awk '{print $1}')
        ssh ${MASTER} kubectl delete po $podname --grace-period=0 --force
        ssh ${MASTER} kubectl get po|grep ${ProJ}
fi


添加执行权限

chmod 755 /root/docker_dir/reboot_app.sh

 

添加执行shell命令

 1.png

 

 将下面的内容,贴过去

#!/bin/bash

bash -x /root/docker_dir/reboot_app.sh

 

效果如下:

1.png

 

手动构建应用

点击Build Now

1.png

 

点击#1

1.png

 

点击控制台输出

1.png

 

它会自己下载一些组件,需要等待一段时间。

1.png

 

出现spring图标,表示应用开始启动构建了。

1.png

 

最后出现错误

1.png

 

为啥呢? 查看springbootdemo 的Dockerfile文件,查看第一行

FROM registry-scu.cloudtoGo.cn/ubuntu:jdk

需要把 registry-scu.cloudtogo.cn 添加到 /etc/docker/daemon.json中

 

登录到jenkins服务器,修改 /etc/docker/daemon.json

vim /etc/docker/daemon.json

内容如下:

{"insecure-registries": ["192.168.10.122","registry-scu.cloudtogo.cn"]}

 

重新加载docker

/etc/init.d/docker reload

 

再次手动构建一次,点击Build Now

查看构建过程

出现以下提示,说明正在下载镜像 registry-scu.cloudtogo.cn/ubuntu:jdk 

1.png

 

最后提示执行完成

1.png

 

查看harbor仓库

会发现多了一个镜像,这个镜像,就是刚刚构建时,提交的。

1.png

 

查看Pod状态

root@k8s-master:~# kubectl get pods -o wide
NAME                                READY   STATUS             RESTARTS   AGE     IP              NODE        NOMINATED NODE   READINESS GATES
ph-rc-nj7j2   0/1     ImagePullBackOff   0          5m19s   192.168.36.68   k8s-node1   <none>           <none>

发现pod运行在k8s-node1 这台服务器,状态是ImagePullBackOff

 

查看pod详细信息

kubectl describe po maven-deployment-7bd87867f8-6tlgp

输出:

Events:
  Type     Reason     Age                     From                Message
  ----     ------     ----                    ----                -------
  NORMal   Scheduled  7m15s                   default-scheduler   Successfully assigned default/maven-deployment-7bd87867f8-6tlgp to k8s-node1
  Normal   Pulling    5m49s (x4 over 7m14s)   kubelet, k8s-node1  Pulling image "192.168.10.122/maven:latest"
  Warning  Failed     5m49s (x4 over 7m14s)   kubelet, k8s-node1  Failed to pull image "192.168.10.122/maven:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused
  Warning  Failed     5m49s (x4 over 7m14s)   kubelet, k8s-node1  Error: ErrImagePull
  Normal   BackOff    5m36s (x6 over 7m13s)   kubelet, k8s-node1  Back-off pulling image "192.168.10.122/maven:latest"
  Warning  Failed     2m11s (x20 over 7m13s)  kubelet, k8s-node1  Error: ImagePullBackOff


出现 

Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused

说明,k8s-node1 这台服务器的 /etc/docker/daemon.json 没有更改

 

登录到k8s-node1 这台服务器,修改文件

vim /etc/docker/daemon.json

内容如下:

{"insecure-registries": ["192.168.10.122"]}

 

重新加载docker

/etc/init.d/docker reload

 

重新加载pod

登录到k8s master服务器,删除pod,重新应用

root@k8s-master:~# cd /root/kube-conf/
root@k8s-master:~/kube-conf# kubectl delete -f ph-rc.yaml
service "maven-service" deleted
deployment.extensions "maven-deployment" deleted
root@k8s-master:~/kube-conf# kubectl apply -f ph-rc.yaml
service/maven-service created
deployment.extensions/maven-deployment created


再次查看状态

root@k8s-master:~/kube-conf# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
ph-rc-7bd7475544-q9b6j   1/1     Running   0          27s   192.168.36.77   k8s-node1   <none>           <none>
发现处于Running状态了

 

访问应用页面

查看svc暴露的端口

root@k8s-master:~/kube-conf# kubectl get svc|grep maven
ph-service   NodePort    10.98.152.31   <none>        8080:31002/TCP   4m

可以发现,暴露的端口是31002

 

使用谷歌访问页面

http://192.168.10.130:31002/

 

效果如下:

1.png

 

使用k8s-node1 的ip

http://192.168.10.131:31002/

效果同上!

 

打开本地的项目springbootdemo,修改文件IndexController.java

路径如下:

springbootdemo\src\main\java\com\example\demo\WEB\controller

 

修改下面2行内容,把数字加1

jsonObject.put("welcome2", "2");
jsonObject.put("welcome7", "7");

 

重新提交到gitlab,然后重新构建一次,点击Build Now

等待构建成功后,刷新页面

1.png

 

 发现内容已经更新了!

 

文本参考链接:

https://linux265.com/news/3465.html

https://www.cnblogs.com/aguncn/p/9789320.html

https://juejin.im/post/5c07b1126fb9a049e82b4cfe


--结束END--

本文标题: Jenkins+harbor+gitlab+k8s 部署maven项目

本文链接: https://lsjlt.com/news/193647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Jenkins+harbor+gitlab+k8s 部署maven项目
    maven项目部署流程图如下:   环境介绍操作系统ip角色版本ubuntu-16.04.4-server-amd64192.168.10.122Jenkins+harborJenkins 2.176.2,ha...
    99+
    2023-01-31
    项目 harbor Jenkins
  • 基于Jenkins+Gitlab+Harbor+Rancher+k8s CI/CD实现
    讲正文开始前先回顾一下以往传统的代码部署方式。     通常运维人员在接到代码(新项目)上线的任务前都要做大量的准备工作,包括:物理主机、虚拟机、代码运行环境、数据库安装配置、各种帐号创建,...
    99+
    2023-01-31
    Harbor Gitlab Jenkins
  • php项目k8s部署
    好的,首先,Kubernetes (k8s) 是一个容器编排工具,用于管理和部署容器化应用。如果你想将 PHP 项目部署到 k8s 集群,你需要执行以下步骤: 将你的 PHP 项目打包成 Docker 镜像。这可以通过在你的 PHP 项...
    99+
    2023-09-23
    kubernetes php docker 容器 云原生
  • K8s部署PHP项目
    前言         前端时间PHP项目部署升级需要 ,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。 一、部署步骤 1.创建Dockerfile文件 Dockerfile是...
    99+
    2023-09-02
    kubernetes laravel php
  • jenkins怎么部署git项目
    要在Jenkins上部署Git项目,您需要按照以下步骤操作: 在Jenkins上安装Git插件: 打开Jenkins的主页。 ...
    99+
    2023-10-27
    jenkins git
  • k8s如何部署java项目
    这篇文章给大家分享的是有关k8s如何部署java项目的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下载jar的包[root@master test]# wget https://dl...
    99+
    2023-06-22
  • k8s集群部署springboot项目
    一、前言 本篇,我们将基于k8s集群,模拟一个比较接近实际业务的使用场景,使用k8s集群部署一个springboot的项目,我们的需求是: 部署SpringBoot项目到阿里云服务器 ; 基于容器打包,推送私有镜像仓库 ; 采用K8S集群...
    99+
    2023-09-06
    k8s集群部署java应用 k8s部署springboot k8s部署java应用 k8s部署微服务项目 k8s部署微服务
  • k8s怎么部署php项目
    要在Kubernetes上部署PHP项目,可以按照以下步骤进行操作: 创建一个包含项目代码的Docker镜像。可以使用Docker...
    99+
    2023-10-27
    k8s php
  • GitLab+Jenkins+Maven+Tomcat 实现自动集成、打包、部署
    目录一、安装 Tomcat 服务二、在 Jenkins 上安装 Maven1.安装 Maven2.创建 Jenkins 任务3.验证一、安装 Tomcat 服务 1.安装 JDK J...
    99+
    2024-04-02
  • 怎么将前端gitlab项目自动化部署到k8s上
    这篇文章主要介绍“怎么将前端gitlab项目自动化部署到k8s上”,在日常操作中,相信很多人在怎么将前端gitlab项目自动化部署到k8s上问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么将前端gitlab...
    99+
    2023-07-05
  • php项目自动化部署 —— Jenkins
    一 、确认本地安装好了Java的JDK 地址:Java Downloads | Oracle 因为我是在本地安装jenkins,这里用到的是java11-windows 安装JDK,并配置环境变量,csdn教程有很多 二、jinkins安装...
    99+
    2023-09-25
    jenkins 自动化 java git php
  • k8s部署java项目的实现
    下载jar的包 [root@master test]# wget https://dl.halo.run/release/halo-1.4.16.jar [root@master...
    99+
    2024-04-02
  • k8s中如何部署springboot项目
    在k8s中部署Spring Boot项目通常可以通过以下几个步骤完成: 创建Docker镜像:首先,将你的Spring Boot...
    99+
    2024-04-02
  • Jenkins配置maven项目之打包、部署、发布的全过程
    Jenkins和项目在两台服务器上 Jenkins的下载安装部署省略,可自行上官网。 1.安装maven插件 完成后,会出现“success”,并且勾选&...
    99+
    2024-04-02
  • k8s如何部署分布式jenkins
    k8s如何部署分布式jenkins,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernet...
    99+
    2023-06-04
  • Vue项目部署到jenkins的实现
    目录服务器配置环境配置到jenkins上看看jenkins干了什么服务器配置环境 需要安装yarn命令,但是yarn是通过npm安装的,所以要先安装npm,npm又是node附带的,...
    99+
    2024-04-02
  • Jenkins如何自动部署SpringBoot项目
    这篇文章给大家分享的是有关Jenkins如何自动部署SpringBoot项目的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、Jenkins安装下载jenkins安装包,maven安装包;打开xftp将安装包上传...
    99+
    2023-06-25
  • 怎么使用docker部署k8s项目
    要使用Docker部署Kubernetes项目,可以按照以下步骤进行操作:1. 安装Docker和Kubernetes:首先,确保已...
    99+
    2023-10-11
    docker k8s
  • k8s部署jenkins的流程是什么
    部署Jenkins到Kubernetes(k8s)的流程如下: 创建一个Kubernetes集群:安装和配置一个Kubernet...
    99+
    2023-10-27
    k8s jenkins
  • K8s部署gitlab的步骤是什么
    创建一个Kubernetes集群,确保集群可以正常运行。 安装Helm(如果尚未安装),并添加GitLab的Helm仓库。 ...
    99+
    2024-03-05
    K8s gitlab
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作