本文以部署 Spring boot + Maven 项目为例,使用码云作为代码托管仓库,在 CentOS 7 上搭建 Jenkins 持续集成环境。

1. 准备工作

1.1 安装 Java 环境

Jenkins 是基于 Java 开发的持续集成工具,需要在 Java 环境下运行。用下面命令查看系统是否已安装 Java:

yum list installed | grep jdk

如果没有,使用 yum search 命令查找 openjdk 版本,选择合适的 jdk 进行安装:

yum search openjdk
yum -y install java-1.8.0-openjdk-devel

验证 Java 是否安装成功:

java -version

1.2 安装 Maven

依次运行以下两条命令:

wget http://repos.fedorapeople.org... -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven

验证 Maven 是否安装成功:

mvn -v

1.3 安装 Git

直接通过 yum 安装,安装完成后查看版本验证是否安装成功:

yum -y install git
git --version

2. 安装和配置 Jenkins:

2.1 安装 Jenkins

依次运行以下三条命令:

sudo wget https://pkg.jenkins.io/redhat... -O /etc/yum.repos.d/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat...
yum -y install jenkins

如果之前从 Jenkins 导入过 key,那么 rpm --import 将失败,因为已经有一个 key 了。忽略它,继续执行 install 即可。

2.2 启动 Jenkins

启动 Jenkins,并且设置开机自启动:

systemctl start jenkins.service
chkconfig jenkins on

Jenkins 默认使用8080端口,访问以下链接即可看到 Jenkins 的 Web 界面:

http:// <服务器地址>:8080

如果无法访问,检查一下防护墙,是否有开放端口,或使用命令 netstat -ntulp 查看端口是否被占用。

2.3 进入 Jenkins

首次进入 Jenkins 需要输入管理员密码,使用以下命令查看初始密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

选择默认的 install suggested plugins 安装插件,等待安装完成后依照步骤创建用户,创建完成后即可登入。

2.4 配置 Jenkins

进入 Manage Jenkins -> Global Tool Configuration,依次配置 JDK、Git 和 Maven 路径。

2.4.1 查看 JDK 路径

使用 yum 安装的软件不会帮我们配置环境变量,直接使用命令echo $JAVA_HOME 是看不到路径的。
先用以下命令查看路径:

which java

看到的结果是 /usr/bin/java ,但实际上这只是个软连接,并不是 JDK 真正的所在目录。
继续使用以下命令查看:

ls -l /usr/bin/java

看到 /usr/bin/java 指向了 /etc/alternatives/java,很遗憾,还不是我们要找的真正路径。
继续追踪:

ls -l /etc/alternatives/java

结果指向了 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java,不同版本的 JDK 目录名可能有些不同,这就是 JDK 真正所在的地方。

同理可获得 Maven 的所在路径。



2.4.2 安装和配置插件

进入 Manage Jenkins -> Manage Plugins,搜索并安装 Publish Over SSHMaven Integration 两个插件, Git Plugins 插件已经默认安装上了,我们无需再安装。

配置 SSH 免密码登录
在配置插件之前,我们先在 Jenkins 服务器上生成密钥对。运行以下命令切换到 jenkins 用户:

sudo su jenkins

如果无法切换,则打开 /etc/passwd 文件,找到 jenkins 那一行,将 /bin/fasle 改成 /bin/bash
切换成功后,命令提示符的用户名可能是 bash-4.2$,想要正常显示用户名的话,先切换回 root 用户,执行以下操作:

编辑文件 vi ~/.bash_profile
加入语句 export PS1='[u@h W]&dollar;'
立即生效 source ~/.bash_profile

再切换到 jenkins 用户,就显示正常了。接下来运行以下命令生成密钥对:

ssh-keygen -t rsa

一路按回车完成,会在 /var/lib/jenkins/.ssh/ 目录下生成 id_rsaid_rsa.pub两个文件。
id_rsa.pub 文件里的内容追加到应用服务器上的 /root/.ssh/authorized_keys 文件末尾,每行一个 key,注意是应用服务器。重启应用服务器上的 ssh 服务:

systemctl restart sshd.service

现在 Jenkins 可以免密码登录应用服务器了,以 jenkins 用户身份运行命令来测试一下:

ssh root@<应用服务器地址>

首次连接会有确认提示,输入 yes 即可。这步很重要,如果第一次没有手动连接确认,Jenkins 会连不上。

配置 Public over SSH 插件
进入 Manage Jenkins -> Configure System,填写 Publish over SSH 设置。

Path to key:填写刚刚生成的 id_rsa 密钥文件的路径。
Name:服务名,随意填写。
HostName:应用服务器的 IP 地址或域名。
Username:登录应用服务器的用户身份。
Remote Directory:远程目录, 应用服务器上存放应用的目录,Jenkins 会把应用拷贝至此目录下。请确保此目录存在。

save~

3. 部署 Maven 项目

点击 New Item 新建任务,随意输入任务名,选择 Maven project, ok。
General,勾选 Discard old builds,可以设置最多保留构建文件多少天,和最多保留多少个构建文件,不然每次构建生成的文件都会保留,占用磁盘空间。

配置远程代码仓库地址,Jenkins 会从该地址拉取代码。注意此处如果提示无法读取仓库,有可能是:

  • 公钥没有添加到远程代码服务器的 authorized_keys 文件里,上面配置 SSH 免登录是 Jenkins 访问应用服务器的,Jenkins 访问代码服务器也同样需要配置,除非应用服务器和代码服务器是同一台机器。如果使用码云或 GitHub 等代码托管平台,会有相应的 SSH key 设置页。
  • 公钥已添加到相应文件里,但没有手动连接第一次。解决方法很简单,以 jenkins 用户身份手动 clone 一次仓库,确认 yes 即可。

勾选 Add timestamps to the Console Output,在控制台输出构建过程。

填写 Maven 打包指令,-DMaven.test.skip=true 表示跳过测试。

勾选 Run only if build succeeds,选择 Send files or execute commands over SSH

接下来就是设置 build 完之后,把 jar 包从 Jenkins 服务器拷贝到应用服务器上,并运行。

Name:选择之前创建的服务。
Source files:maven 打包后生成的 jar 包,即要拷贝到应用服务器运行的程序,可填多个,英文逗号分隔。
Remove prefix:忽略前缀,我们只需要拷贝 target 下的 jar 包,不需要在应用服务器上生成 target 目录。
Remote directory:目标文件夹,会继承全局设置,例如此处会把 jar 包拷贝到 /usr/local/app/demo 目录下。
Exec command:拷贝完成后,在应用服务器上执行的命令或脚本。这里只是简单地杀掉已启动的旧程序,并运行新程序。

save -> build now,构建成功后,打开浏览器访问你的站点吧~

4. 总结

其实整个流程不是很复杂,Jenkins 从远程代码库拉取代码 -> 调用 maven 指令将项目打包 -> Jenkins 将打包好的文件拷贝到远程应用服务器 -> 在远程应用服务器上执行 shell 指令,启动程序。其中 Jenkins 所有在远程服务器上的操作都是通过 SSH 完成的。
通过 yum 安装 Jenkins 和 Java 比较方便,但是在配置的时候相对麻烦,安装路径要自己找,配置 SSH 的时候也是要用 jenkins 用户身份,而不是 root,如果采用解压缩包的方式就比较自由一些。

在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境相关推荐

  1. 【Jenkins+RF】从零搭建Jenkins+Robot Framework持续集成环境

    转自:https://www.jianshu.com/p/ef8d3109ac5f    感恩 安装Jenkins 系统环境:CentOS Linux release 7.3.1611 x86_64 ...

  2. Linux上快速搭建Jenkins服务器 实现持续集成开发

    http://my.oschina.net/long0419/blog/183299 简介: 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开 ...

  3. Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)

    Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...

  4. 构建基于Jenkins + Github的持续集成环境

    登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...

  5. Jenkins安装和持续集成环境配置

    Jenkins安装和持续集成环境配置 持续集成说明 Jenkins安装 Jenkins插件管理 下载中文汉化插件 Jenkins用户权限管理 安装Role-based Authorization St ...

  6. Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)

    一.安装说明 系统环境:CentOS release 6.4 JDK版本:jdk1.8.0_181 Jmeter版本:apache-jmeter-3.0 Ant版本:apache-ant-1.9.13 ...

  7. GitLab 与 Jenkins 结合构建持续集成环境

    持续集成概述及运行流程 CI/CD介绍 把开发工作流程分为以下几个阶段: 编码 → 构建 → 集成 → 测试 → 交付 → 部署 正如你在上图中看到,持续集成(Continuous Integrati ...

  8. Linux企业运维篇——git+gitlab+jenkins+docker构成持续集成环境

    一.GitLab与jenkins Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. Jenkins是一个开源软件项目,是基于Java开发的一 ...

  9. Springboot Gitlab Jenkins Maven Docker 持续集成/持续交付

    Gilab安装教程 http://blog.csdn.net/chenhaifeng2016/article/details/78603216 http://blog.csdn.net/chenhai ...

最新文章

  1. Mybatis-Generator(MBG)教程与Idea的MBG插件
  2. uva 1625——Color Length
  3. dubbo的监控中心
  4. 人工智能加速期:算法为王还是场景落地优先 ?
  5. Ext.data-GroupingStore/JsonStore/SimpleStore
  6. Windows下使用TeamViewer连接远程服务器,以及解决“远程桌面关闭后TeamViewer不能连接”的问题
  7. go -生成pb文件 - 上
  8. 生活杂谈-空调的修理
  9. 容器技术Docker K8s 37 Serverless Kubernetes(ASK)详解-Serverless容器进化
  10. Maven默认的生命周期
  11. JAVA项目中遇到URLEncoder URLDecoder编码解码问题
  12. 解码H264视频出现花屏或马赛克的问题
  13. 经典书籍《打开量化投资的黑箱》阅读心得
  14. CALayer和Retina显示屏的高分辨率的支持
  15. web学生网页设计作业源码——国际足联世界杯(HTML+CSS)
  16. js原生下载excel(xlxs及xls格式)、word、png(图片格式)方法
  17. 计算机金融专业亚洲大学排行,金融类专业大学排名
  18. 电子器件系列二:IGBT
  19. Unity中关于Destroy的API
  20. linux保存压缩程序输出,Linux压缩zip文件

热门文章

  1. Spring常用注解,自动扫描装配Bean
  2. 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名
  3. Oracle 将一个查询结果值动态赋值给一个变量
  4. 检测客户端是否安装 Silverlight 插件和判断IE是否安装或支持Silverlight(限IE)
  5. 安全问题推动企业采用托管和混合IT服务
  6. web.config中namespace的配置(针对页面中引用)
  7. 爱奇艺全国高校算法大赛初赛A
  8. 【小程序开发】微信小程序开发中遇到的那些坑...
  9. openssl构建CA认证
  10. 网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP