侧边栏壁纸
博主头像
昂洋编程 博主等级

鸟随鸾凤飞腾远,人伴贤良品自高

  • 累计撰写 71 篇文章
  • 累计创建 79 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Gitee+Jenkins(docker版)自动推送并部署Springboot项目到远程服务器

Administrator
2023-08-10 / 0 评论 / 0 点赞 / 49 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-06-14,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

如果要参考gitlab配置请参考Gitlab+Webhook自动推送并更新Springboot项目 Gitlab的配置部分

环境介绍

  1. Jenkins服务器(Centos7.6):
# 官方推荐jenkinsci/blueocean镜像
docker run --name=jenkins --user root -d -p 9080:8080 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /data/jenkins_home:/var/jenkins_home --restart=always --privileged=true jenkinsci/blueocean

# 官方jenkins/jenkins镜像
docker run --name=jenkins --user root -d -p 9080:8080 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /data/jenkins_home:/var/jenkins_home --restart=always --privileged=true jenkins/jenkins
  • JDK1.8
  • Maven3.6.3
    注意docker安装的jenkins,而且是较新的版本,所以jenkins容器内的java版本是11的,而我的项目是基于JDK1.8的,所以不能用jenkins容器来的java去打包项目,会出错,得使用服务器上的JDK1.8版本。能这么使用主要得益于使用docker安装jenkins的挂载卷配置,挂在卷映射配置好之后就可以在jenkins的容器内部使用java和mvn命令
  1. 远程应用服务器 - 用来运行springboot项目的

Jenkins配置

安装插件

Manage Jenkins --> Plugins --> Available plugins
搜索Publish Over SSH并安装
image-1691657014697

工具配置

Manage Jenkins --> Tools

  • 配置本地JDK
    image-1691657187604
  • Git自动安装即可
    image-1691657215073
  • 配置Maven
    image-1691657273946

记得最后要保存

系统配置

Manage Jenkins --> System

  • 全局属性
    因为不能使用jenkins容器内的java11,所以我们要给容器内的JAVA_HOME环境变量设置成挂载jdk1.8的路径
    image-1691657552556
  • Publish over SSH
    这个工具需要前面安装好Publish Over SSH插件
    image-1691657770283

同样记得最后要保存

Credentials配置

Manage Jenkins --> Credentials

  • 配置gitee的账号密码
    image-1691657970450

Pipline任务配置

新建任务 New Item,任务类型为pipline
image-1691658149770

触发方式

这里使用Generic Webhook Trigger方式
image-1691658514824
注意要使用Generic Webhook Trigger需要先安装Generic Webhook Trigger插件
image-1692858232879

流水线

流水线的任务是通过脚本配置的,就长下面这样
image-1691658744544

  • 顶层pipeline
pipeline {

}
  • pipeline下面包含agent、stages,stages下面包含多个stage步骤,stage下面又包含多个steps子步骤(也就是具体的执行命令或脚本)
    image-1691659024484

这里面脚本要实现的步骤就三个:

  1. 拉取代码
  2. maven重新打包
  3. 上传到远程服务器并执行命令重启服务
  • 脚本的编写jenkins提供模板生成Pipeline Syntax(流水线语法)
    比如获取git源码,要生成pipline脚本
    image-1691659445543

maven打包不需要模板,直接写命令就行,其中sh代表执行命令,然后mvn命令要写文件的全路径

/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true

还有一个需要使用到Publish over SSH,这个也可以使用模板生成脚本
image-1691660061222
注意命令会在上传完成之后执行,如果想要在上传完成之前执行命令,需要配两个Transfer Sets
比如我这里先执行备份文件命令,然后再上传文件执行重启命令
image-1691722336445

  • 完整的pipline脚本
pipeline {
    agent any
    stages {
        stage('Get Code') {
            steps {
                // 获取git源码
                git credentialsId: 'd76b95e1-74d3-4ae9-920a-1a8d5027abef', url: 'https://gitee.com/zrzrno/demo.git'
            }
        }
        stage('Maven Build') {
            steps {
                // Maven打包
                sh "/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true"
            }
        }
        stage('Deploy') {
            steps {
                // 上传jar包到到213试服务器
                sshPublisher(publishers: [sshPublisherDesc(configName: '213', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd /usr/local/demo/ && sh demo.sh restart', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/usr/local/demo', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/demo-1.0.0.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            }
        }
    }
}

这里边还有一个问题,就是通过Publish over SSH执行远程命令,有的远程服务器的环境变量是识别不到的,比如我这里上传完jar包之后需要进入到特定目录并运行另一个脚本文件,那个脚本文件大致就是重启了java服务,问题就在这个java命令居然没有识别到,报错了,所以我把java命令写成了全路径就可以了

nohup /usr/local/jdk1.8.0_271/bin/java -jar ${APP_NAME} >logs.out 2>&1 &

Gitee配置

找到项目-->管理-->webHooks
image-1691660832737

配置没问题的话就可以在gitee中看到webhook请求历史
image-1691660924534
jenkins中也能看到pipline的执行视图
image-1691661004437

Jenkins容器内部在线安装配置node环境

因为jenkins是用docker安装的,前面我们安装docker的时候挂载了jdk目录和maven目录到jenkins容器内部.所以我们可以直接使用java和mvn命令

现在我们需要使用nodejs打包,而且我们不能删了jenkins容器重新跑一个,所以得寻求其他的方式,可以直接进入jenkins容器内部手动安装,不推荐这种方式,这需要进入到jenkins服务器了,而且如果有jenkins多节点,那就太麻烦了,其实jenkins有提供在线安装的方式

安装nodejs插件

在插件中安装NodeJS Plugin
image-1692839772824
插件装好之后就可以在全局工具配置哪里找到nodejs的工具配置

配置nodejs工具

系统管理-->全局工具配置
image-1692840010983
记得别忘了保存

保存之后那nodejs已经自动安装了吗,不,还没有,工具配置只是配置了工具的安装方式,要想真正使用还需要一次初始安装

初始化安装nodejs

创建一个freeStyle的项目,然后在构建环境哪里选择Provide Node & npm bin/ folder to PATH
image-1692840343356

执行一次项目然后看控制台日志
image-1692840514087
此时表明nodejs已安装好,但是此安装只是针对当前项目有效,如果要全局使用,就需要配置全局环境变量

配置nodejs为全局环境变量

系统管理-->系统配置-->全局属性-->环境变量新增一个NODE_HOME,路径为上一步控制台中输出的目录
image-1692840717222

在pipline中测试nodejs

新建一个流水线项目,流水线语法我们选择tool:Use a tool from a predefined Tool Installation
image-1692841006713
通过流水线语法生成的脚本在pipline居然会报错,它自动生成的是 tool name: 'node16', type: 'nodejs' ,运行会报错,这也算是一个bug吧,没关系我们手动改成正确的

pipeline {
    agent any
  
    tools {nodejs 'node16'}

    stages {
        stage('Hello') {
            steps {
                sh 'node -v'
                sh 'npm -v'
            }
        }
    }
}

同样我们在步骤里查看node版本和npm版本,运行查看控制台输出日志
image-1692841195158

jenkins容器内在线安装工具总结

不光是nodejs,包括安装其他如java、maven、go等集成环境,我们都可以通过这种方式,还有多版本,比如node我想多增加一个其他的node版本,都是可以的,总结下拉有四个步骤

  1. 安装工具对应插件
  2. 配置工具安装方式
  3. 在一个任务重使用配置好的工具安装方式,执行一次安装
  4. 配置好全局变量
    接下来就是可以在项目中正常使用了
0

评论区