公司的生产环境部署应用的时候,报了一个错误
Deploying [/root/.jenkins/workspace/bqj-open/anne-web-api/target/anne-web-api.war]
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to deploy [/root/.jenkins/workspace/bqj-open/anne-web-api/target/anne-web-api.war]
at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:107)
at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:185)
at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:73)
at hudson.plugins.deploy.CargoContainerAdapter$1.invoke(CargoContainerAdapter.java:116)
at hudson.plugins.deploy.CargoContainerAdapter$1.invoke(CargoContainerAdapter.java:103)
at hudson.FilePath.act(FilePath.java:997)
at hudson.FilePath.act(FilePath.java:975)
at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:103)
at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:61)
at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735)
at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:676)
at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.post2(MavenModuleSetBuild.java:1072)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:621)
at hudson.model.Run.execute(Run.java:1760)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:542)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:405)
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: FAIL - Deployed application at context path / but context failed to start
公司jenkins部署的版本是2.60.1,用的部署插件是
Deploy to container Plugin,版本是1.10版本,
百度了一下原因,大部分都说要把ContextPath的/ROOT换成/,可惜不是我的原因,我看了下插件的源码,大致思路是通过tomcat的manager-script角色进行部署,可是我通过tomcat的界面部署时可以的,而通过war包部署时的时候报错了,可是远程调试jenkins太麻烦,而且还是线上环境,索性直接根据插件源码,写了个小工具类,测试部署是否成功
public class TestJenkinsCargoDeploy {
public static final String CHAR_SET="utf8";
public static void main(String[] args) throws IOException {
String path="/";
String version=null;
String config=null;
String war=null;
boolean update=false;
String tag=null;
InputStream data = new FileInputStream(new File("C://jenkins.war"));
StringBuilder buffer = new StringBuilder("/deploy");
try{
buffer.append("?path=").append(URLEncoder.encode(path,CHAR_SET));
if (version != null) {
buffer.append("&version=").append(URLEncoder.encode(version, CHAR_SET));
}
if (config != null) {
buffer.append("&config=").append(URLEncoder.encode(config.toString(), CHAR_SET));
}
if (war != null) {
buffer.append("&war=").append(URLEncoder.encode(war.toString(), CHAR_SET));
}
if (update) {
buffer.append("&update=true");
}
if (tag != null) {
buffer.append("&tag=").append(URLEncoder.encode(tag, CHAR_SET));
}
}catch(Exception ex){
}
invoke(buffer.toString(),data);
}
public static void invoke(String path,InputStream data) throws IOException {
String url="http://localhost:8080/manager/text";
String userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36";
String username="tomcat";
String password="s3cret";
URL invokeURL = new URL(url + path);
HttpURLConnection connection = (HttpURLConnection)invokeURL.openConnection();
connection.setAllowUserInteraction(false);
connection.setDoInput(true);
connection.setUseCaches(false);
if (data == null)
{
connection.setDoOutput(false);
connection.setRequestMethod("GET");
}
else
{
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type", "application/octet-stream");
connection.setChunkedStreamingMode(0);
}
if (userAgent != null) {
connection.setRequestProperty("User-Agent", userAgent);
}
if (username != null)
{
String authorization = toAuthorization(username, password);
connection.setRequestProperty("Authorization", authorization);
}
connection.connect();
if (data != null) {
pipe(data, connection.getOutputStream());
}
String response=null;
try
{
response = toString(connection.getInputStream(), "UTF-8");
}
catch (IOException e)
{
e.printStackTrace();
}
if (!response.startsWith("OK -")) {
System.out.println(response);
}
}
private static String toAuthorization(String username, String password)
{
StringBuilder buffer = new StringBuilder();
buffer.append(username).append(':');
if (password != null) {
buffer.append(password);
}
return "Basic " + new String(Base64.encodeBase64(buffer.toString().getBytes()));
}
private static void pipe(InputStream in, OutputStream out)
throws IOException
{
BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
byte[] bytes = new byte['?'];
int n;
while ((n = in.read(bytes)) != -1) {
bufferedOut.write(bytes, 0, n);
}
bufferedOut.flush();
bufferedOut.close();
in.close();
}
private static String toString(InputStream in, String charset)
throws IOException
{
InputStreamReader reader = new InputStreamReader(in, charset);
StringBuilder buffer = new StringBuilder();
char[] chars = new char['?'];
int n;
while ((n = reader.read(chars, 0, chars.length)) != -1) {
buffer.append(chars, 0, n);
}
return buffer.toString();
}
}
分享到:
相关推荐
例如,您可以在 pom.xml 文件中添加 FindBugs 插件的配置,然后在 Jenkins 中安装 FindBugs 插件,最后在构建项目时生成 FindBugs 报告。 本教程指导您从头开始安装和使用 Jenkins,包括系统设置、任务配置、构建...
2. **创建项目**:点击左侧菜单的“新建项目”,在弹出的页面中选择“自由风格的软件项目”并填写项目名称。 ### 三、配置源码管理 1. **选择SCM**:在项目配置页面,找到“源代码管理”部分,根据实际情况选择Git...
对于那些依赖Jenkins进行自动化测试和部署的项目团队来说,这款插件是不可或缺的工具。 总之,Jenkins Control Plugin 0.10.2016版为IDEA用户提供了离线安装的解决方案,使得在IDEA中管理Jenkins任务成为可能,极大...
选择这个选项,然后在弹出的条件选择器中,我们可以看到多种条件,如 "Always" 和 "Never"。这里我们选择 "Boolean parameter",对应我们的 "IS_PACKAGE" 参数。设置条件为 "IS_PACKAGE == true",意味着只有当 "IS_...
在弹出的配置窗口中,选择之前配置的 SSH 预置,然后指定要发送的文件或目录。可以使用 Ant 样式的通配符来匹配多个文件。此外,还可以设置执行远程命令,如重启服务、更新数据库等。 4. **触发器和高级选项** 你...
3. **填写任务名称**:在弹出的页面中输入新任务的名称,注意任务名称必须是唯一的。 4. **选择任务类型**:在此步骤中,可以选择“复制已有的项目”。这种方式可以帮助快速复用已有项目的配置,减少重复劳动。 ###...
在弹出窗口中,在描述中键入一些单词,并将范围设置为“无范围”,然后单击“创建” 将结果对话框中的“端点和承载令牌”值保存到另一个位置。 我们将很快在詹金斯使用这些。 官方文件: : 2.添加詹金斯凭证 ...
在IT行业中,持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD)是现代软件开发流程中的重要环节,而Jenkins作为一款开源的自动化服务器,被广泛应用于实现这些流程。本教程将深入讲解...
部署中应包含健康检查机制,定期检测服务器状态,当发现故障时,能自动将流量切换至备用服务器,确保服务不间断。 7. **监控与日志管理**: 实时监控系统性能和日志记录是必不可少的。工具如Prometheus、Grafana...
Jenkins 是一款开源持续集成工具,广泛应用于自动化构建、测试及部署等环节。在使用 Jenkins 过程中,为了确保系统的安全性,合理的登录验证机制至关重要。本文将详细介绍 Jenkins 的两种登录方式:**直接登录**和**...
- 点击左侧“Clone”,然后在弹出窗口中复制“HTTP地址”,去除地址中的工号+@符号即可获得Repository URL。 2. **构建步骤详解** - 构建步骤的选择依赖于项目的构建方式,需要咨询开发团队以确定最佳实践。 -...
在CentOS 7系统中安装Jenkins是一个必要的过程,特别是对于那些依赖持续集成和持续部署(CI/CD)流程的开发者来说。Jenkins是一个广泛使用的开源项目,它以Java语言编写,提供了一种自动化构建、测试和部署软件的平台...
Python-Wise2CBreeze作为一个Python开发的工具,易于与其他Python生态系统中的工具集成,例如Jenkins、GitLab CI/CD等,从而构建出完整的自动化流程。这有助于DevOps团队更快地实现持续集成和持续交付(CI/CD),...
以下是根据书名和描述提炼出的相关知识点: 1. **项目构建自动化**:书中会详细讲解使用构建工具如Maven或Gradle进行自动化构建的过程,包括编译源代码、管理依赖关系、打包应用、执行测试等步骤。构建自动化有助于...
5. **持续集成/持续部署(CI/CD)**:结合Jenkins或GitLab CI/CD等工具,建立自动化构建、测试和部署流程,确保代码质量并快速响应变更。 6. **日志和监控**:集成Prometheus和Grafana等工具,对微服务的性能和健康...
一个独立的部署系统需要包括的内容是非常丰富的(绝对不仅仅是Jenkins部署插件要做的那些事情)。部署系统需要连接项目中涉及的人、环境、制品库以及构建环境等,只不过这种连接的目的是打通从制品到最终服务的整个...
例如,Jenkins、GitLab CI/CD 或者 GitHub Actions 可用于实现这个目标。 4. **测试与部署** 在云原生架构中,测试不仅是为了验证功能,也是为了确保系统的可靠性、性能和安全性。TDD(测试驱动开发)和BDD(行为...
在弹出的偏好设置窗口中,找到并点击“General”下的“Workspace”,在右侧界面可以看到“Build”区域,勾选“Automatically build”选项,这样每次保存代码时,MyEclipse就会自动进行编译。 2. **jad.exe与JAD反...