作者:微信小助手
发布时间:2023-06-14T15:49:51
这次我们来聊下如何一键部署分支代码到服务器。 背景Jenkins 简易安装教程配置 Jenkins通过 Jenkins 一键部署 创建一个项目 配置拉取的代码仓库 配置打包 运行项目 拷贝安装包 安装插件 备份服务器 JAR 包 拷贝 JAR 包到远程服务器 滚动更新服务 远程服务器上创建脚本 部署 遇到的问题 问题 1、添加 Git 仓库时,无法访问 问题 2 问题 3 解决方案 解决思路 问题 4:could not identify password for [xxx] 问题 5:ssh 超时配置 新项目没有完善的部署流程,只能自己先搭一套来顶一顶了。 服务器资源如下: 原理图如下所示: Jenkins 官方网站对 Jenkins 如何安装已经讲解得非常清晰了,所以这里不再赘述,贴一下官方网站,自行去看吧。 Jenkins 下载地址: Jenkins 安装步骤: 安装完成后,我们需要配置 Jenkins。 因为我们要打包部署的项目是 Java 项目,所以需要将 Java JDK 所在的目录和 Maven 所在目录配置到 Jenkins 中,这样 Jenkins 打包时就能利用这两个工具进行打包。 配置全局工具:Maven 配置如下: 配置环境变量: 上面的配置完成后,我们就可以测试下是否可以将代码仓库中的某个分支的代码拉取下来进行打包。 在使用 Jenkins 时,我们必须创建一个任务才行,然后这个任务里面可以配置要执行的各种操作。 Jenkins中自动构建项目的类型有很多,常用的有以下三种: 每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在 实际开发中可以根据自己的需求和习惯来选择。 下面演示创建一个简单的自由风格项目来完成项目的集成过程: 拉取代码->编译 Java 项目->备份服务器 JAR 包->删除服务器 JAR 包->拷贝 JAR 包到服务器->更新服务。 创建成功后就会出现一条记录: 为了测试我们的 Jenkins 是否能正常拉取代码并打包,我们需要配置 Gitlab 代码仓库的地址、用户名、密码。 配置到这一步后,我们可以先验证下这些配置是否生效。 在 Dashboard 可以看到配置完成的任务,点击 Build Now 按钮即可开始拉取代码、打包项目。 我们还可以从控制台输出看到打包记录。 Jenkins 会从 Gitlab 仓库拉取指定分支的代码,然后运行 mvn clean package 命令,进行打包。 输出记录中打印出了以下关键信息:代码拉取后存放在哪,打的 jar 包在哪。 代码和生成的 jar 包在到这个根目录找到: 还可以从打印日志的最后看到这次打包用时 2 min 33 秒,任务的执行状态为 Finished Success。 接下来就是将这些 JAR 包拷贝到远程服务器地址。 拷贝安装包需要用到一个插件:Publish Over SSH。 Dashboard>Manage Jenkins->插件管理->Avaliable plugins。 下图是已经安装好了这款插件的截图。 配置这个插件的全局配置: 在上传打包好的 JAR 包之前,需要将应用服务器上的 JAR 备份。 备份的步骤如下: 需要配置以下内容: 项目采用的 Docker Swarm 方式来管理集群中的微服务。 Jenkins 通过 插件 发送命令到应用服务器上执行指定的脚本 这个命令使用 如果想要 jenkins 执行远程服务器上的脚本,则需要先在远程服务器上创建一个可执行的脚本。 这里我们需要重启服务器的容器服务,所以在这个目录 /nfs-data/wukong/ 编写一个 restart.sh 脚本。 这个命令使用 再次测试是否能正确编译代码,上传 jar 包,部署微服务。 部署结果如下:Finished: SUCESS SSL certificate problem: unable to get local issuer certificate 解决方案: 参考链接:https://stackoverflow.com/questions/39746535/jenkins-git-ssl-certificate-error 解决方案: 参考链接:https://stackoverflow.com/questions/39746535/jenkins-git-ssl-certificate-error Exception when publishing, exception message 远程机器上需要用 sudo 命令执行 docker 命令,这个时候需要输入密码,通过配置账号 xx 执行 sudo 命令不需要输入密码。 解决方案:修改超时时间设置 InfoQ 签约作者、蓝桥签约作者、阿里云专家博主、51CTO 红人。
背景
Jenkins 简易安装教程
https://www.jenkins.io/download/
https://www.jenkins.io/doc/book/installing/
配置 Jenkins
通过 Jenkins 一键部署
创建一个项目
配置拉取的代码仓库
配置打包
echo "开始打包"
mvn clean package
echo "打包完成"运行项目
C:\ProgramData\Jenkins.jenkins\workspace\passjava-dev
拷贝安装包
安装插件
备份服务器 JAR 包
bak
。
bak
上创建一个以当前时间作为目录名的目录。
拷贝 JAR 包到远程服务器
C:\ProgramData\Jenkins.jenkins\workspace<Jenkins 任务名><编译目录>
Remote directory
目录,则创建一个。这里我们不需要配置,全局配置已经可以满足条件了。
滚动更新服务
echo "部署 jar 包"
cd /nfs-data/wukong/
nohup sudo sh restart.sh
exitnohup
和 sudo
权限来执行名为 restart.sh
的脚本。nohup
命令用于将脚本在后台运行,即使终端会话结束,脚本仍然继续运行。远程服务器上创建脚本
echo "部署 passjava 服务"
nohup sudo docker service update accountservice --force > /nfs-data/wukong/jenkins/account.txt
nohup sudo docker service update gatewayservice --force > /nfs-data/wukong/jenkins/gateway.txt
nohup sudo docker service update qmsservice --force > /nfs-data/wukong/jenkins/qms.txt--force
选项来更新名为"accountservice、gatewayservice、qmsservice"的 Docker 服务。命令的输出被重定向到文件/nfs-data/wukong/jenkins/xxx.txt
中。部署
遇到的问题
问题 1、添加 Git 仓库时,无法访问
git config --system http.sslVerify false
git config --global http.sslVerify false问题 2
stderr: fatal: unable to access 'url of my git/': SSL certificate problem: self signed certificate in certificate chain
git config --system http.sslVerify false
git config --global http.sslVerify false问题 3
解决方案
解决思路
问题 4:could not identify password for [xxx]
问题 5:ssh 超时配置
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,011 ms]
关于我