返回

Jenkins+GitLab远程部署SpringCloud微服务

发布时间:2023-01-01 17:23:19 303
# spring# 服务器# ssh# 容器# 软件

之前用jenkin部署过单体架构,今天试一下用Jenkins部署微服务到远程服务器。

我的微服务项目结构:

Jenkins+GitLab远程部署SpringCloud微服务_jenkins

 

使用Jenkins的思路是使用maven单独打包成一个个微服务的jar包,推送到远程服务器,并使用脚本把这些jar包启动起来。

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

快速安装jenkin

Jenkins版本差异很大,里面的面板跟功能可能都不太一样。我目前正在使用的最新版本的Jenkins的docker镜像,我打包推送到了github,直接下载就可以了。

拉取镜像:

docker pull  nanlist/jenkins:2.3

启动容器:

docker run -itd -p 9989:8080 -p 50000:50000 --name lgnjenkins --privileged=true -v /home/jenkins/jenkins_home:/var/jenkins_home  docker.io/nanlist/jenkins:2.3

一定要-v 做宿主机挂载,方便从宿主机中取登录密码,配置文件以及打包的文件,注意安装权限。

--privileged=true 让容器有root权限,方便进入容器操作
-p 9989:8080 jenkins的web访问端口9989
-v /home/jenkins/jenkins_home:/var/jenkins_home 容器/var/jenkins_home路径映射到宿主机/home/jenkins/jenkins_home

浏览器访问:

​​http://10.10.11.80:9989/​​

获取登录密码:

宿主机里面查看密码:

cat /home/jenkins/jenkins_home/secrets/initialAdminPassword

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_02

 

管理员登录名,密码自己设置。

初始化插件

安装推荐的插件,如果插件安装这一步失败,把容器删了重新做一个容器。

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_03

配置jenkins

配置Jenkins主要是配置三个地方:

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_04

插件管理-安装插件:

选择系统管理 -> 插件管理 选择可选插件,安装publish over ssh和Maven Integration,没有中文界面的还可以安装中文插件Localization: Chinese (Simplified),我这里用的gitlab,所以gitlab的插件也得安装一下:

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_05

系统管理-全局工具配置:

配置maven:

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_06

 

配置一下jdk:

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_07

 

jenkins 容器中已经安装了jdk,把容器中jdk的安装目录放到Java_home 里面。这里有一个风险,jenkins目前不支持java8了里面自带的jdk11,不知道以后会不会有影响。如果Jenkins容器内部里面没有安装jdk8可以在容器内部安装一下。

进入容器内部:

下载:
下载地址:​​​https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html​​ 外部下载好 传到容器内部也可以,没有挂载,用docker cp 都可以。

解压:

tar -zxvf jdk-18_linux-x64_bin.tar.gz

移动到/usr/local/下面

mv jdk1.8.0_171  /usr/local/jdk1.8

设置环境变量:

vim /etc/profile

如果容器内部没有vim命令,安装一下:

apt-get update
apt-get install vim

文件末尾加入:

export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

让配置立即生效:

source /etc/profile

查看一下版本:

java -version

系统配置-配置远程服务器

前面的教程里面配置过一个jenkin远程打包vue的远程目录,所以这里配置一下微服务的地址:

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_08

 

这里有个坑,凭证类型,如果你的凭证不是用户密码,而是用的gitlab的token,这个凭据配置里面配一下,选择你的类型。token类型选 secret text。

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_09

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_10

点高级设置密码,

先勾选,再输入密码。

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_11

 

点右下角,测试一下!

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_12

配置自动部署任务

点击“新建”–填写任务名称,选择“构建一个maven项目”然后保存:

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_13

 

点击配置:

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_14

General

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_15

源码管理

配置gitlab:

Jenkins+GitLab远程部署SpringCloud微服务_jar_16

 

填一下gitlab的用户名,密码,别的不用管。

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_17

 

现在显示有权限了:

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_18

 

记得修改一下分支:

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_19

 

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_20

构建触发器

勾选Build whenever a SNAPSHOT dependency is built

Jenkins+GitLab远程部署SpringCloud微服务_jar_21

构建环境

Jenkins+GitLab远程部署SpringCloud微服务_jar_22

Pre Steps

maven父子项目依赖指令配置:

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_23

 

单独构建并打包子模块模块:

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_24

Build

Root POM选择项目根目录的pom.Xml
Goals and options 使用maven命令打包(打包命令根据自己需要)

参考:clean install -Dmaven.test.skip=true(跳过测试打包)

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_25

Post Steps

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_26

构建后操作

选择推送到远程服务器 Send build artifacts over SSH

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_27

 

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_28

 

构建环境配置.ssh server选择ssh配置上的远程服务器名称。因为我在系统设置里面配置了两个远程打包的目录,这里选jar的目录。

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_29

 

source files 填入工作空间里面有很多任务文件夹,进入你的任务里面jar的全路径

Jenkins+GitLab远程部署SpringCloud微服务_Jenkins_30

 

Remove prefix 去掉前面无用的路径

remote directory 目标服务器文件夹,就是ssh配置的那个路径,同步过来的文件都放在那个路径下面,最好设置一个新的文件夹

exec command 就是文件传过去后,所执行的启动脚本。

如果不知道source files的目录:

可以把构建后远程这一步空着,先执行拉取代码和用maven打包,再去Jenkins工作空间里面去看一下。

Jenkins容器中的工作目录/var/jenkins_home/workspace/ 如果跟宿主机做挂载了去宿主机的目录里面(我这里做了挂载) 验证是不是有工程代码。

所有的Jenkins的任务都在这个目录里面:

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_31

 

打开你要验证的任务:

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_32

 

打开你要部署的微服务:

看看里面的target目录里面有没有jar包。

Jenkins+GitLab远程部署SpringCloud微服务_jar_33

构建

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_34

查看控制台日志

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_35

 

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_36

查看一下Jenkins的工作目录,看一下是不是已经打包好了。

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_37

 

再去远程服务器的目标文件夹里面看看是不是已经同步过来了。

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_38

 

用Jenkins打包还是比较成熟的,遇到问题跟踪控制台日志可以一步一步测试。

1.先验证是不是能从gitlab里面拉取代码(Jenkins容器中的工作目录/var/jenkins_home/workspace/ 如果跟宿主机做挂载了去宿主机的目录里面 验证是不是有工程代码)
2.验证是否可以使用maven打包(如果第一步已经把代码拉取下来了,去看一下里面有没有target)
3.验证是否可以同步到远程服务器,(这一步错误比较多,一般是磁盘空间不足,或者目录不对,这一步可以先不设置打包后的脚本,确定jar包推送到远程文件夹以后,再设置打包后的脚本)
4.验证启动脚本。

部署成功一个服务,别的服务也是一样的步骤:
一个服务建一个任务,把不同服务打好的jar,分别同步到远程服务器,分别执行对应的脚本启动。

脚本样例:

#!/bin/bash
#chkconfig: 2345 80 90
#date:2022年3月21日

PID=$(ps -ef | grep lgs-modules-file.jar | grep -v grep | awk '{ print $2 }')

if [ -z "$PID" ]
then
echo "程序未启动。"
else
echo "程序在启动中,正在停止..."
kill -9 $PID
fi


echo '开启启动程序 ...'

nohup java -javaagent:/home/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar=agent.service_name=lgs-modules-file,collector.backend_service=10.10.11.79:11800 -jar lgs-modules-file.jar > /home/jar/sys/modules/file/logs/lgs-modules-file.log 2>&1 &



echo "starting service..."
sleep 20

#根据重启后是否有当前应用判断启动是否成功
endPID=$(ps -ef | grep lgs-modules-file.jar | grep -v grep | awk '{ print $2 }')

if [ -z "$endPID" ]
then
echo "程序启动失败。"
else
echo "程序重启成功...pid:"${endPID}

fi

Jenkins+GitLab远程部署SpringCloud微服务_gitlab_39

 

Jenkins+GitLab远程部署SpringCloud微服务_jenkins_40

 

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_41

 

最终的效果:

Jenkins+GitLab远程部署SpringCloud微服务_spring cloud_42

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线