CI/CD——使用Jenkins自动化构建java项目之使用传统方式部署java web项目jpress

CI/CD------使用Jenkins实现自动化部署与持续集成之jenkins插件与凭据配置https://blog.csdn.net/xiaochenXIHUA/article/details/160766389

一、创建使用传统方式部署java web项目jpress的任务

1.0、创建一个新的Item

登录到jenkins的web管理后台,点击左上角的【新建Item】即可进入任务配置界面,在该界面根据提示输入【任务名称(如:classical-javaweb-jpress-deploy)】-->【构建一个自由风格的软件项目(Freestyle project)】-->【确定】按钮即可创建一个新任务,如下图所示:

1.1、通用设置

General需配置的内容
描述: 填写该任务的简要说明,方便了解这个任务是做什么的(如:使用传统方式部署java web项目jpress)
高级: 勾选【使用自定义的工作空间】且在目录下填写路径(如:/data/jenkins/jobs/jpress)
显示名称: 根据实际的任务名称填写,方便识别即可(如:classical-javaweb-jpress-deploy)

1.2、源码管理

源码管理下选择了【Git】并在"Repository-->Repository URL"下输入了项目的git地址(如:ssh://git@gitlab.ck.com:22222/root/jpress.git)时报错"Failed to connect to repository : Command "/usr/bin/git ls-remote -h ssh://git@gitlab.ck.com:22222/root/jpress.git HEAD" returned status code 128:
stdout:
stderr: No ECDSA host key is known for [gitlab.ck.com]:22222 and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists."这是典型的 SSH 主机密钥验证失败问题:

  1. Jenkins 所在机器第一次通过 SSH 访问 gitlab.ck.com:22222
  2. SSH 默认开启了主机密钥严格校验,发现本地没有记录该主机的指纹,拒绝连接;
  3. 你的凭证虽然是正确的 SSH 密钥,但主机信任问题没解决,所以报错
bash 复制代码
#解决"源码管理"添加Git项目的源码SSH地址后报错问题
#1-让当前jenkins所在服务器的用户(root)信任GitLab的主机上的公钥
#如下命令的作用是:让本机信任服务器(解决弹窗)(告诉本机 SSH:gitlab.ck.com 这台服务器是安全的、可信的,我不用再弹窗确认了)
ssh-keyscan -p 22222 gitlab.ck.com >> /root/.ssh/known_hosts

#2-在jenkins所在服务器上验证测试与gitlab.ck.com的SSH连接是否通畅(若成功输出"Welcome to GitLab, @你的用户名!"内容则表示公私钥配对成功,验证通过了,可以正常连接gitlab操作项目了);若失败则【权限被拒绝:公钥没放到 GitLab 上 / 私钥不对;连接超时:端口 / 网络不通;主机密钥错误:之前的 known_hosts 没配置好】
#如下命令作用是:测试真正的权限连接(验证公私钥)
ssh -T git@gitlab.ck.com -p 22222
SSH登录有两个独立的安全检查 说明
主机身份验证(known_hosts 做的) * 检查:你连的服务器是不是真的服务器 * 防止:中间人攻击 * 你的命令:只是把服务器加入白名单,跳过弹窗
用户身份验证(公私钥做的) * 检查:你有没有权限登录这台服务器 * 防止:陌生人登录 * 必须:本地有私钥 → 服务器上配了对应的公钥

1.3、构建触发器

根据自己任务的实际情况按需配置,我这里用不到,先不配置,如下图所示:

1.4、构建环境

1.4.1、先配置SSH传输内容的服务器

构建环境涉及到文件的传输,因此需要先配置SSH传输到目标服务器的内容。

bash 复制代码
#在jenkins所在的服务器上生成密钥对
#1-生成默认密钥对命令;密钥对的路径是【/root/.ssh/】,【id_ed25519】是私钥文件;【id_ed25519.pub】是公钥文件
ssh-keygen -t ed25519

#2-将公钥添加到需ssh免密登录的远程服务器上
#将公钥添加到需ssh免密登录的远程服务器上
ssh-copy-id -i /root/.ssh/id_rsa.pub user@remote-hostIP
 
#若远程Linux服务器的SSH端口不是默认的22则需要指定端口号【-p 端口】
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 端口号 user@remote-hostIP
 
#如:我这里生成密钥对的服务器IP是【192.168.1.11】,还需要ssh免密登录的服务器IP有【192.168.1.30】(给root与ck用户都配置了公钥实现免密登录)
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.30

ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 ck@192.168.1.30
 

在jenkins所在服务器生成密钥对,且与需要部署应用的服务器上配置公钥后,就可以在jenkins的【Manage Jenkins】-->【系统配置】界面最底部的【Publish over SSH】模块下配置【先配置jenkins所在服务器上的私钥路径"Path to key"的值"/root/.ssh/id_ed25519"】-->【然后在SSH Servers】下面添加需要部署应用的服务器信息【Name表示创建的任务下构建环境时显示的名称(主要是为了方便识别,可随意取名)-->Hostname表示主机IP-->Username表示连接主机的用户名称(如:root)-->Remote Directory表示在需要部署服务器部署的路径(如:/usr/local)-->若需要部署应用服务器的SSH端口不是默认的22则需要在"高级"下配置对应的端口信息】如下图所示:

1.4.2、构建环境配置

bash 复制代码
#构建环境配置
#需要在jenkins所在服务器上创建"指定的自定义工作空间"
mkdir -p /data/jenkins/jobs/jpress
cd /data/jenkins/jobs/jpress

在jenkins的"构建环境(Enviroment)"下【勾选"Delete workspace before build starts"(勾选则表示每次都删除工作空间的下的内容,重新拉取项目源码;不勾选则表示只是更新变动内容)】-->【勾选"Send files or execute commands over SSH before the build starts"(表示发送文件或执行命令前的操作),在该项内容下配置需要部署应用的SSH内容、传输的原文件"source files"(如:start-jpress.sh);还有执行的命令"Exec command"(如:rm -rf /usr/local/jpress && mkdir /usr/local/jpress && mv /usr/local/start-jpress.sh /usr/local/jpress && chmod 755 /usr/local/jpress/start-jpress.sh)】;最后再勾选【Add timestamps to the Console Output】如下图所示:

1.5、构建步骤

在jenkins的构建步骤(Build Steps)中选择【调用顶级Maven目标(Invoke top-level Maven targets)】接着选择【Maven版本】-->【目标(输入"clean install -D maven.test.skip=true")】如下图所示:

1.6、构建后操作

在jenkins的"构建后操作"下选择【通过SSH构建产品(Send build artifacts over SSH)】接着在下面的【SSH Publishers]-->【SSH Server】(配置部署应用服务器的内容【Name是部署应用的SSH配置内容】-->【传输设置(Transfer set)配置需要传输的原文件(Source files)(如:starter/target/*.zip)-->移除前缀(Remove prefix)(如:/starter/target/)-->远程目录(Remote diretory)(如:jpress/)-->执行命令(Exec command)(如:/usr/local/jpress/start-jpress.sh)】)最后点击【保存】按钮,如下图所示:

到这里,恭喜你表示一个"使用传统方式部署java web项目jpress"的任务配置成功了。

二、执行jenkins任务

2.1、在部署jpress的服务器上配置jdk1.8环境

bash 复制代码
#需要在部署jpress的服务器上安装jdk1.8环境
yum install -y java-1.8.0-openjdk-devel

#查看java版本
java -version

2.2、立即执行jenkins任务

在jenkins中创建好的任务"classical-javaweb-jpress-deploy"界面左侧选择【立即构建(Build Now)】表示立即执行该任务,然后在左侧底部会有一个【Builds】的任务内容,点击任务右侧的"向下箭头图标"选择"控制台输出"即可看到jenkins的任务执行情况,如下图所示:

2.3、直接在浏览器中检查jpress应用是否启动

在浏览器中输入被部署jpress应用的服务器IP:8000即可看到安装界面,如下图所示:

到这里,恭喜你,在jenkins中完成了一整套的"使用传统方式部署java web项目jpress"的自动化任务。

相关推荐
弹简特2 小时前
【精通Postman接口测试】04-Postman的CLI命令+Jenkins和Newman+Allure+Jenkins自动化接口持续集成
自动化·jenkins·接口测试·postman
弹简特3 小时前
安装Jenkins保姆级教程
jenkins
牛奶咖啡1319 小时前
CI/CD——使用Jenkins实现自动化部署与持续集成之jenkins插件与凭据配置
ci/cd·jenkins·jenkins必备插件安装·jenkins全局工具配置·jenkins的凭据配置·jenkins自动化部署流程·jenkinsgitlab集成
摇滚侠19 小时前
DSL 学习 ElasticSearch 主要就是学习 DSL 查询语言
学习·elasticsearch·jenkins
庚昀◟2 天前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins
牛奶咖啡132 天前
CI/CD——使用Jenkins实现自动化部署与持续集成
ci/cd·jenkins·jenkins是什么?有啥用·jenkins有哪些适用场景·jenkins的优缺点·jenkins的安装部署·jenkins安装必备环境
测试那点事儿3 天前
第10章 零基础接口自动化到 Jenkins 持续集成【定时监控与邮件告警完整落地】
ci/cd·自动化·jenkins
a***72893 天前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
摇滚侠4 天前
黑马 Elasticsearch 全套教程,黑马旅游网案例
大数据·elasticsearch·jenkins