Jenkins+SpringBoot+Swagger2部署到Tomcat的坑
本地启动正常,jenkins发布到服务器访问doc.html显示资源错误,swagger-ui.html直接Unable,且swagger-resources报404
内容如下:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.5</version>
</dependency>
@SpringBootApplication
@EnableSwagger2
public class CommServiceApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(CommServiceApplication.class, args);
}
}
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
// 全局报错信息
List<ResponseMessage> responseMessages = new ArrayList<>();
Arrays.stream(ErrorEnums.values()).forEach(errorEnums -> {
responseMessages.add(
new ResponseMessageBuilder().code(errorEnums.key).message(errorEnums.value).build()
);
});
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.globalResponseMessage(RequestMethod.GET, responseMessages)
.globalResponseMessage(RequestMethod.POST, responseMessages)
.globalResponseMessage(RequestMethod.PUT, responseMessages)
.globalResponseMessage(RequestMethod.DELETE, responseMessages)
.apiInfo(new ApiInfoBuilder()
.title("boot-swagger-test")
.description("boot-swagger-test 测试项目")
.contact(new Contact("test", "", ""))
.version("1.0.0")
.build()) // API信息
.pathMapping("/") // 项目路径调用
.groupName("默认接口")
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.commonservice.controller")) // 扫描接口路径
.paths(PathSelectors.any())
.build();
}
}
server.servlet.context-path=/
server.port=9200
jekins配置如下:
问题原因
jenkins路径与项目路径不一致导致的。
此时访问项目:
localhost:9200//jekins_webapp/swagger-ui.html#/
localhost:9200//jekins_webapp/doc.html
百度很多办法都没有用:有的加注解,有的加拦截。
因为本地启动正常,所以猜测可能是由于此时war包的静态资源路径指向,与项目本身不一致。
解决
需要将配置server.servlet.context-path=/
与jenkins的Context path设置为同一路径。
修改server.servlet.context-path=/jekins_webapp