Jenkins 安装自动化部署教程
安装
Jenkins支持Tomcat安装、yum安装以及Docker安装,任选一即可。
Tomcat安装
1、下载
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
2、将项目放入tomcat中webapps文件夹下,启动运行即可。
卸载
1、关闭tomcat:./shutdown.sh
2、删除/webapps/jenkins下所有文件:rm -rf jenkins
3、删除配置文件:rm -rf /root/.jenkins/
yum安装
1、获取软件安装源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
2、安装jenkins
yum -y install jenkins
如果在yum安装的时候出现下面这段信息是因为安装的时候检查了公钥,而本地没有生成相应的公钥
Public key for jenkins-2.263.1-1.1.noarch.rpm is not installed
解决办法:
新增 --nogpgcheck 参数,实现不检查Public Key而强制安装, 命令如下
yum install jenkins --nogpgcheck
3、配置
打开jenkins的配置文件
vim /etc/sysconfig/jenkins
修改端口号、用户,启动
# 修改 JENKINS_USER 的值为root
JENKINS_USER="root"
# 修改 JENKINS_PORT 的值为启动端口号
JENKINS_PORT="8080"
修改Jenkins相关文件夹用户权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
4、启动jenkins
systemctl start jenkins
查看Jenkins进程所属用户,若显示为root用户,则表示修改完成。
ps -ef | grep jenkins
重启Jenkins
systemctl restart jenkins
至此,Jenkins就安装好了,接下来是进来启动配置Jenkins。
卸载
1、rpm卸载
rpm -e jenkins
2、检查是否卸载成功
rpm -ql jenkins
3、彻底删除残留文件:
find / -iname jenkins | xargs -n 1000 rm -rf
启动(准备工作)
等待Jenkins启动成功,打开浏览器输入ip:端口
打开Jenkins管理界面。
1、解锁 Unlock Jenkins
按照提示查看服务器的密码,并复制到输入框即可。如下:
cat /var/lib/jenkins/secrets/initialAdminPassword
2、安装插件 Customize Jenkins
选择第二个选项“选择插件来安装”,下一步,点击“无”,安装。(不安装插件,用的时候再安装)
3、设置登录用户密码以及管理地址登录。
4、汉化
- 选择
Manage Jenkins
->Manager Plugin
->Available
; - 输入框中输入
Local
,勾选Locale
和Localization: Chinese (Simplified)
; - 点击下方的
Download now and install after restart
按钮,安装后重启; - 等待下载,并勾选
Restart Jenkins when installation is complete and no jobs are running
意思安装完成后在空闲时间重启; - 重启后,依次进入
Manage Jenkins
->Configure System
,找到Local
标签,输入zh_cn
并勾选下方多选框强制使用保存即可;
5、加速
使用默认的镜像在国内下载插件是会很慢,可以将jenkins 的baseurl修改为华为云镜像地址。
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
vi /etc/yum.repos.d/jenkins.repo
修改baseurl的值为:
baseurl=https://mirrors.huaweicloud.com/jenkins/redhat-stable
插件管理 -> 高级 -> 升级站点
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
版本升级
1、下载war包,Java版本匹配Jenkins版本。历史版本
2、进入 /usr/lib/jenkins
目录,替换war包后重启即可。
实际操作时,提示“Job for jenkins.service failed because the control process exited with error code.”,通过“systemctl status jenkins.service”排查原因。提示“Unable to access jarfile /usr/lib/jenkins/jenkins.war”,执行“chmod 777 /usr/lib/jenkins/jenkins.war”。
系统管理
全局工具配置
Maven配置
选择 文件系统中的setting文件
, 并输入maven的setting.xml路径。
JDK
如果服务器已经安装JDK,填写名称、JAVA_HOME,并去除自动安装
标签,yum安装的jdk一般在/usr/lib/jvm
目录下。
Git
同上,填写名称、及git路径,并去除自动安装
标签。
Maven
同上,填写名称、及MAVEN_HOME,并去除自动安装
标签。
系统配置
系统配置中主要配置系统设置及下载安装的插件。
Jenkins Location
Jenkins URL
默认Jenkins管理地址
系统管理员邮件地址
填写管理员邮箱,与发送邮件的地址一致
邮件配置
Jenkins系统自带邮件配置,但内容不够丰富,不能够进行个性化设置,建议安装 Extended E-mail Notification
插件。
配置:
依次进入 Manage Jenkins
-> Configure System
,找到Extended E-mail Notification
标签,以QQ邮箱为例填写以下信息:
SMTP服务器 smtp.qq.com
用户默认邮件后缀 @qq.com
使用SMTP认证
用户名 xxxxx@qq.com
密码 生成的授权码
SMTP端口 587
Default Content Type HTML
Default Recipients 默认收件人
Default Subject 默认主题
Default Content 默认内容
Default Triggers 何时发送邮件,推荐勾选 Failure-Any 和 Success
Default Content 推荐使用以下模板:
<!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>
本邮件由系统自动发出,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
<td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></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>构建状态: ${BUILD_STATUS}</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>
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
自带的邮件设置跟上面的设置类似,可以发送测试邮件测试。
构建项目(Jenkins + SpringBoot + Maven + Git + Githooks + Docker)
Docker
使用阿里云 容器镜像服务
创建个人版实例,新建命名空间。
SpringBoot
src/main/docker/Dockerfile
FROM openjdk:8
VOLUME /tmp
ENV profiles=$profiles
ENV port=$port
ADD exam.jar app.jar
ENTRYPOINT ["sh","-c","java -Xms64m -Xmx1024m -Duser.timezone=GMT+8 -Djava.security.egd=file:/dev/./urandom -jar /app.jar --server.port=$port --spring.profiles.active=$profiles "]
pom.xml
<!-- docker -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>dxh/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
需要的插件
- Git Parameter(参数化构建)
- Email Extension Template(邮件模板)
- Git\Gitee(拉取Git项目)
- Publish Over SSH(SSH服务器、远程传输文件及执行Shell命令)
新建任务
点击首页新建任务,输入任务名称(项目名称),勾选构建一个Maven项目,如果没有此项需要安装 Maven Integration
插件;
General
1、构建策略,勾选 Discard old builds
,输入保存构建的天数和最大个数,一般写7天就够;
2、参数化构建,勾选 This project is parameterized
,添加参数,选择 Git Parameter
,如果没有此选项需要安装 Git Parameter
插件;
源码管理
勾选Git
,输入Repository URL
项目的Git地址,更改指定分支
,即可。
如果是私有仓库
还需要以下的设置:
点击 Credentials
后面的添加,添加Git的账号密码。
构建触发器
选择 GitHub hook trigger for GITScm polling
;
需要以下额外设置,注意保存。
在系统配置
中找到GitHub
标签,选择高级
,勾选为 Github 指定另外一个 Hook URL
,复制输入框中的内容;
打开github的项目中的设置,添加 Webhooks
在Payload URL 中输入刚复制的地址
Content type 选择json
勾选Just the push event.
意思有新的提交的通知。
完成这些设置后,当你向git提交新的代码是就会触发改选项进行自动化部署。
Pre Steps
1、Maven targets,Add下拉框中选择 Invoke top-level Maven targets
,选择Maven版本,目标中填写 clean install -Dmaven.test.skip=true
2、Execute shell,Add下拉框中选择 Execute shell
,填写:
mvn docker:build
echo "当前dcoker镜像:"
docker images
5、Post Steps
1、Execute shell
勾选 Run only if build result
;
Add post-build step
选择 Execute shell
,然后在命令中输入以下shell命令:
#服务名称 项目打出来的jar包的名称
SERVICE_NAME="demo"
#镜像名称,maven配置的imageName
IMAGE_NAME="wisdomebook/demo"
#仓库地址
REGISTRY_URL="registry.cn-hangzhou.aliyuncs.com"
echo '================开始推送镜像================'
docker login --username=用户名--password=密码 "$REGISTRY_URL"
docker tag "$IMAGE_NAME":latest "$REGISTRY_URL"/命名空间/"$SERVICE_NAME":${Tag}
docker push "$REGISTRY_URL"/命名空间/"$SERVICE_NAME":${Tag}
echo '================删除本地临时镜像================'
docker rmi -f "$IMAGE_NAME":latest
docker rmi -f "$REGISTRY_URL"/命名空间/"$SERVICE_NAME":${Tag}
2、SSH Publishers(需要安装SSH Publishers插件)
Add post-build step
选择 Send files or execute commands over SSH
SSH Server
Name中选择目标服务器(需要提前在Configure System 中配置Publish over SSH项,填写目标服务器账号密码端口SSH Servers),勾选Verbose output in console
打开日志。
Transfers
-> Exec command
中填写:
#!/usr/bin/env bash
source /etc/profile
#defined
#服务名称 项目打出来的jar包的名称
SERVICE_NAME="demo"
#容器对外端口
CONTAINER_PORT="8082"
#应用的端口,一般是springBoot jar自身的端口
APP_PORT="8082"
#环境
PROFILES=test
#容器名称 加容器端口号是防止有同名应用多次部署
CONTAINER_NAME="$SERVICE_NAME""_""$CONTAINER_PORT"
#健康检查地址
HEALTH_CHECK_URL="http://127.0.0.1:""$CONTAINER_PORT/demo/hello/"
#镜像地址
IMAGE_NAME="registry.cn-hangzhou.aliyuncs.com/命名空间/"$SERVICE_NAME":"${Tag}
# 删除Docker容器
echo '================停止并删除正在运行的容器镜像================'
docker stop `docker ps -a| grep $CONTAINER_NAME | awk '{print $1}' `
docker rm `docker ps -a| grep $CONTAINER_NAME | awk '{print $1}' `
# 下载镜像
echo '================开始下载新最新的镜像======================='
docker login --username=账号--password=密码 registry.cn-hangzhou.aliyuncs.com(docker地址)
docker pull $IMAGE_NAME
# 启动Docker容器
echo '================启动容器================================='
docker run -d -e profiles=$PROFILES -e port=$APP_PORT -e JAVA_OPTS="-Xms64m -Xmx1024m" -v /home/logs/"$CONTAINER_NAME":/logs --net=host --restart=always --name $CONTAINER_NAME $IMAGE_NAME
# 检查端口
echo '================开始检查容器是否启动正常==================='
sleep 30
new_service_pid=`lsof -n -P -t -i :$CONTAINER_PORT`
if [ -n "$new_service_pid" ]
then
echo "启动成功"
else
echo "启动失败"
set -e
exit 1
fi
#检查服务是否启动正常
echo '================开始检查服务是否启动正常==================='
status=`curl -I -m 5 -s -w "%{http_code}" -o /dev/null "$HEALTH_CHECK_URL"`
echo $status
if [ $status = "200" ]
then
echo "服务启动正常"
else
echo "服务启动失败"
set -e #注意,这句最重要,一定要先设置这个
exit 1 #然后再退出
fi
构建后操作
添加 Extended Email Notification
,内容使用默认即可,可在系统设置中更改收件人等信息,也可以在当前输入框中更改该项目的收件人等信息;
以下是各项的意思:
①Disable Extended Email Publisher:勾选后,邮件就不发送,看自己的情况喽,如果你想调试某些东西,又不想发邮件出去就可以勾选这个。
②Project Recipient List:收件人地址;多个收件人邮件地址用逗号进行分割;想使用全局默认配置的话,可以使用$DEFAULT_RECIPIENTS。
③Project Reply-To List:允许回复人的地址;想使用系统设置中的默认值的话,可以使用$DEFAULT_REPLYTO;
④Content Type:邮件文档的类型,可以设置HTML等格式;
⑤Default Subject:默认主题,也就是邮件标题;同理可以使用$DEFAULT_SUBJECT
⑥Default Content:默认邮件内容;这里是关键;我这里使用的是模板${SCRIPT, template="groovy-html.template"};后面会讲;当然不想使用模板的话,可以通过使用jenkins自身提供的变量来自己定义;
⑦Attach Build Log:发送的邮件是否包含日志;
此处有一个系统的 坑点 需要注意,Triggers
中默认的收件人都为 Developer List,我们未曾设置该项,
一定要自己再添加一个 Recipient List
方可接收到邮件!!!
否则构建日志就会显示:
An attempt to send an e-mail to empty list of recipients, ignored.
保存构建
启动方式:
(1)手动选择Build with Parameters
;
(2)向github提交代码是自动触发构建;
参考文章
Jenkins权限配置失误后导致登录失败(Access Denied)的解决办法
Jenkins 自动化部署
jenkins 邮件配置之良心之作
Jenkins与Github集成 webhook配置
springBoot集成Jenkins,实现自动化部署
Jenkins修改语言为中文
Jenkins 忘记登录密码解决办法
Linux安装Jenkins
Centos7 部署Jenkins环境配置jdk1.8+maven3.6.3
Jenkins怎么发邮件,自动化大老手把手教你
Jenkins+jdk1.8安装教程
使用Jenkins、Docker、GitLab 部署SpringBoot项目