【发布时间】:2018-05-04 00:25:10
【问题描述】:
我正在使用PostRepositoryHook 开发插件来监听开发者所做的所有推送。在测试期间,我意识到当我使用命令行运行git push 命令对其进行测试时它确实有效。但是,当我做 PR 并合并我的 PR 时它不起作用。
以下是代码详细信息。
// LoggingPostRepositoryHook.java
import com.atlassian.bitbucket.hook.repository.PostRepositoryHook;
import com.atlassian.bitbucket.hook.repository.PostRepositoryHookContext;
import com.atlassian.bitbucket.hook.repository.RepositoryHookRequest;
import com.atlassian.bitbucket.hook.repository.SynchronousPreferred;
import javax.annotation.Nonnull;
/**
* Example hook that logs what changes have been made to a set of refs
*/
@SynchronousPreferred(asyncSupported = false)
public class LoggingPostRepositoryHook implements PostRepositoryHook<RepositoryHookRequest> {
@Override
public void postUpdate(@Nonnull PostRepositoryHookContext context,
@Nonnull RepositoryHookRequest hookRequest) {
String message = hookRequest.getRepository().getProject()+" "+ hookRequest.getRepository().getName();
PostMessage postMessage = new PostMessage();
postMessage.send(message);
hookRequest.getScmHookDetails().ifPresent(scmDetails -> {
hookRequest.getRefChanges().forEach(refChange -> {
scmDetails.out().println("Thank you for pusing code! "+ message);
});
});
}
}
// atlassian-plugin.xml
<repository-hook key="logging-hook" name="Logging Post Hook"
i18n-name-key="hook.guide.logginghook.name"
configurable="false"
class="com.myapp.impl.LoggingPostRepositoryHook">
<description key="hook.guide.logginghook.description" />
</repository-hook>
// PostMessage.java
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
public class PostMessage {
public void send(String message) {
HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead
try {
HttpPost request = new HttpPost("http://localhost:3008/git-hooks");
StringEntity params =new StringEntity("details={\"message\":\""+message+"\"} ");
request.addHeader("content-type", "application/x-www-form-urlencoded");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
//handle response here...
}catch (Exception ex) {
//handle exception here
System.out.println(ex);
}
}
}
请帮忙。
【问题讨论】:
-
你怎么知道那个钩子不起作用?
-
我将
message发送到RESTAPI 进行测试。当我使用命令行git push进行测试时,我确实看到了RESTAPI 收到的消息。但是,当我对PR合并进行相同测试时,我看不到RESTAPI 收到的任何消息。 -
PostMessage postMessage = new PostMessage(); postMessage.send(message);这负责发送示例消息。
标签: bitbucket bitbucket-server bitbucket-api