个人觉得没必要提交一次代码触发一次构建,正常情况下我都要push好几次才会构建一次,所以今天记录的这个步骤需要在jenkins面板手动点击构建。
测试代码在文章末尾
1、环境
java
yum install java-1.8.0-openjdk.x86_64
maven
yum install maven
git
yum install git
tomcat
下载地址:官网 或 蓝奏云(tomcat8.5,下载之后将后缀zip改为gz)
(以上所需详细安装方法网上有很多教程,这里不再啰嗦那么多了)
2、下载
官方下载地址
蓝奏云(下载之后将后缀改为war)
下载之后是一个war包
3、启动
将下载的war包放到tomcat webapp目录下,启动tomcat,访问jenkins项目(服务器ip:端口/jenkins
),linux需要关闭防火墙
4、配置
解锁
第一次进入界面需要输入解锁密码,页面给出了解锁密码所在的位置
cat ~/.jenkins/secrets/initialAdminPassword
(tomcat日志也可以看到解锁密码)
安装推荐插件
选项一安装推荐插件,选项二选择插件安装,建议选择第一项。这里需要很久,可以去干点别的事情
可能有一部分插件会安装失败,可以点击retry重试,也可以点击Continue结束安装,进入控制面板后再根据需要安装
设置用户名和密码
设置jenkins路径
这个后面可以更改
控制台页面
设置插件安装源
访问路径:/jenkins/pluginManager/advanced
Update Site项设置为清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(记得提交更改)
安装自定义插件
访问路径:/jenkins/pluginManager/available
- Deploy to container
- Maven Integration
- Git(这个在推荐安装应该已经装过了)
等待安装完成后重启
安装状态:/jenkins/updateCenter/
重启:/jenkins/restart/
环境配置
访问路径:/jenkins/configureTools/
根据自己的安装位置配置
5、开始
创建一个Maven项目
New Item
配置项目源码地址
- 切换到Source Code Management选项卡
- 填入源码地址后会出现图中的报错,这里需要添加一个认证证书,如图,点击Add>Jenkins
在添加之前,需要把服务器的公钥关联到仓库
生成公钥和私钥:ssh-keygen -t rsa
什么都不要输入,一路回车
查看公钥:cat /root/.ssh/id_rsa.pub
在仓库中添加此公钥
查看私钥:cat /root/.ssh/id_rsa
返回jenkins页面,到刚刚添加证书的位置
选择SSH Username with private key项(我尝试过配置登陆账号和密码,但是依旧报错,原因不明)
选中Enter directly单选框
将私钥粘贴进去
点击Add按钮
- 选中刚刚添加的配置
如果依旧报错,点击Apply按钮,刷新页面
报错已经消失了
尝试构建
以上内容配置完成的话,可以尝试构建打包
- 保存配置,回到首页,点击Build Now按钮
- 接着在左边构建列表内点击下拉菜单中的Concole Output按钮查看日志
- 第一次构建则会下载很多jar包,这里稍作等待
- 构建成功
- 进入日志中显示的的目录(
/home/me/.jenkins/workspace/test/target
),可以看到打包成功的war包
6、发布到tomcat
添加一个tomcat容器用来发布项目
启动后访问/manager
后正常情况下会报403错误
配置tomcat远程连接
博主tomcat版本:8.5
-
编辑
conf/tomcat-users.xml
在<tomcat-users>
标签内增加如下代码
(username和password自定)<role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="admin" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
-
编辑
webapps/host-manager/META-INF/content.xml
将<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
改为
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
127
改为了\d+
-
添加
manager.xml
vim conf/Catalina/localhost/manager.xml
添加如下代码
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
-
重启tomcat,并访问
/manager
配置完成!
配置任务
- 点击下拉菜单中的Configure按钮配置刚刚我们创建的项目
- 选中Post-build-Actions选项卡
- 点击Add post-build action按钮,选择Depoly war/ear to a container选项
- 添加tomcat
添加认证证书
username
和password
为上面在tomcat-users.xml
中所添加的
填写war所在路径
Context path为构建后要访问的路径,任意即可
- 配置完成后点击保存按钮
构建
重新构建,等待构建完成,这次应该很快
访问/ContextPath/接口名
完美
测试项目代码
最后贴上此文章所跑的代码,一个基本的SpringBoot项目
TestApplication
package com.example.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
@RestController
class TestController{
@RequestMapping("hello")
public String test(){
return "hello jenkins";
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>Demo project for Spring Boot</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>