构建伟大,无所不能
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
安装工具
- Git
- Maven
- JDK
- Ubuntu
说明
我主要使用Jenkins来构建Java的Maven项目,可能覆盖面只限于Java项目,但后面的Jenkins基本安装过程基本可以通用
确认需求
- 你要用Jenkins来构建什么
- 构建你的项目会用到那些构建工具
- 搜索那些构建工具在Jenkins上的配置
- 搜索相关构建工具的自动化Shell脚本
准备
- Ubuntu
我所使用的系统,我觉得还是挺好用的。如果不喜欢的换可以的。当然系统安装并不是我所涉及的范围。
- 系统的更新
当你安装好系统后,你的系统软件包不一定是最新的,所以需要执行一下更新
sudo apt-get update
sudo apt-get upgrade
- Git
apt install git
- Maven
cd /opt
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
tar zxvf apache-maven-3.6.1-bin.tar.gz
mv apache-maven-3.6.1 maven
cd ~
vi .bashrc
- Maven 环境变量
export MAVEN_HOME=/opt/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
- Maven配置本地仓库
cd /opt
mkdir localrepo
cd /opt/maven/conf
vi settings.xml
<!-- localRepository
50 | The path to the local repository maven will use to store artifacts.
51 |
52 | Default: ${user.home}/.m2/repository
53 <localRepository>/path/to/local/repo</localRepository>
54 -->
55 <localRepository>/opt/localrepo</localRepository>
56 <!-- interactiveMode
57 | This will determine whether maven prompts you when it needs input. If set to false,
58 | maven will use a sensible default value, perhaps based on some other setting, for
59 | the parameter in question.
60 |
61 | Default: true
62 <interactiveMode>true</interactiveMode>
63 -->
- 配置Maven国内源
<mirrors>
<mirror>
<id>aliyun-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun public</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyun-central</id>
<mirrorOf>*</mirrorOf>
<name>aliyun central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>aliyun-spring</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyun-spring-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring-plugin</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
<mirror>
<id>aliyun-apache-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun apache-snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyun-google</id>
<mirrorOf>*</mirrorOf>
<name>aliyun google</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyun-gradle-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun gradle-plugin</name>
<url>https://maven.aliyun.com/repository/gradle-plugin</url>
</mirror>
<mirror>
<id>aliyun-jcenter</id>
<mirrorOf>*</mirrorOf>
<name>aliyun jcenter</name>
<url>https://maven.aliyun.com/repository/jcenter</url>
</mirror>
<mirror>
<id>aliyun-releases</id>
<mirrorOf>*</mirrorOf>
<name>aliyun releases</name>
<url>https://maven.aliyun.com/repository/releases</url>
</mirror>
<mirror>
<id>aliyun-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun snapshots</name>
<url>https://maven.aliyun.com/repository/snapshots</url>
</mirror>
<mirror>
<id>aliyun-grails-core</id>
<mirrorOf>*</mirrorOf>
<name>aliyun grails-core</name>
<url>https://maven.aliyun.com/repository/grails-core</url>
</mirror>
<mirror>
<id>aliyun-mapr-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun mapr-public</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
</mirrors>
- JDK
Jenkins的JDK推荐使用1.8 编译用的JDK只要是正式发布的应该都可以,OracleJDK和OpenJDK选哪个看个人喜好。
Jenkins的安装
Jenkins的安装有三种方式
第一种
- 直接运行
- 下载Jenkins的WAR包
- 在终端执行命令
java -jar jenkins.war --httpPort=8080
- 存在问题
当你运行这条命令时你会发现终端上会打印一堆日志这时你访问localhost:8080时可以访问但是你关闭终端时就无法访问了
- 解决方法
nohup java -jar jenkins.war --httpPort=8080 >output 2>&1 &
- 关闭Jenkins进程
ps -aux|grep java
kill -9 PID
第二种
安装Tomcat把WAR包直接放到Tomcat webapps工作目录里,然后启动Tomcat
- Tomcat 安装
- tomcat下载
tar zxvf apache-tomcat-9.0.22.tar.gz
cd ~
vi .bashrc
export CATALINA_HOME=/opt/tomcat9
export PATH=${CATALINA_HOME}/bin:${PATH}
第三种
第三种也是我比较推荐的一种就是利用Ubuntu的源进行安装
-
优点
- 非常方便
apt
包管理- 开机重启自动启动更省心
-
将自动安装升级的密匙添加到储存库
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
-
将源添加到源列表
vi /etc/apt/sources.list
- 添加
deb https://pkg.jenkins.io/debian-stable binary /
-
更新系统源列表
sudo apt-get update
- 安装
sudo apt-get install jenkins
配置
- 当你看到如下图片时你就安装成功了
最初始的管理员密码就在首页上写着的路径的文件里
vi /Users/shellming/.jenkins/secrets/initialAdminPassword
- 默认安装推荐的插件就可以
- 创建新的管理员用户保存并继续
- 填写你往出映射的地址(公网/内网)
- 把浏览器彻底关闭Chrome把后台也关掉再打开
localhost:8080
Jenkins自带的主题感觉有些丑具体配置从换主题开始
主题配置
- 安装Simple Theme插件
Manage Jenkins > Manage Plugins > 可选插件 > 搜索Simple Theme
- 选择喜欢的主题
Manage Jenkins > Configure System > Theme > 新增CSS URL > 粘贴你选好的主题URL > 保存
插件的安装
- Localization: Chinese (Simplified) //中文
- GitHub Authentication plugin
- GitHub Integration Plugin
- Mail Watcher Plugin
- Publish Over SSH
- Timestamper
- Workspace Cleanup Plugin
- Email Extension Template
- SSH
- SSH Agent
全局工具配置
- 默认 Maven settings文件
- 默认全局settings文件
- 这两个填写此电脑上Maven目录conf下的settings.xml文件位置
- JDK填写你编译用的JDK HOME路径 取消自动安装的勾
- git Default就可以
- Maven 填写本机MavenHome路径 取消自动安装的勾
添加GitHub服务器
⚠️ 凭证类型选择 Secret Text
新建项目配置
SSH Server:选择系统设置中配置的应用服务器
Source files:war包的相对路径(相对于项目根目录)
Remove prefix:war包的相对目录
Remote directory:应用服务器的目录(Windows服务器默认为C盘用户目录下)
Exec command:应用服务器对应的脚本
- 我的部署脚本
#!/bin/bash
DATE=`date +%F-%H-%M`
PROJECT="$1" # 传进来的是v1
PROJECT_TARGET="$2" # 传进来的是v1
ROOTDIR='/opt/deploy'
TOMCAT_HOME='/opt/tomcat9'
#停止tomcat服务
echo '停止tomcat9'
sh ${TOMCAT_HOME}/bin/shutdown.sh
ps -ef | grep ${TOMCAT_HOME}/ | grep -v grep| awk '{print $2}' | xargs kill -9
cp ${ROOTDIR}/${PROJECT}.war ${ROOTDIR}/backups/${PROJECT}-${DATE}.war
rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_TARGET}.war
rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_TARGET}
mv ${ROOTDIR}/${PROJECT}.war ${TOMCAT_HOME}/webapps/${PROJECT_TARGET}.war
#启动tomcat服务
echo '启动tomcat9'
sh ${TOMCAT_HOME}/bin/startup.sh
构建完成邮件通知
⚠️管理员邮箱必须和发通知邮件的邮箱为同一邮箱
Default Content Type: HTML(text/html)
Default Recipients:默认收件人
Default Subject:邮件标题
Default Content:默认模版
Default Triggers:什么时候发出邮件
- 我的邮件模版
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Failed Test Results</b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
<br /></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<!-- <tr>
<td>Test Logs (if test has ran): <a
href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
<br />
<br />
</td>
</tr> -->
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>
Publish Over SSH
返回项目配置构建后的操作
⚠️️关闭E-mail Notification