gpt4 book ai didi

git - 您如何使用 bitbucket 服务器支持 'go get'?

转载 作者:IT王子 更新时间:2023-10-29 02:11:58 32 4
gpt4 key购买 nike

我愿意支持以下形式的请求:

go get acme.com/component

其中 component 是存储在 Bitbucket Server 中的 git 项目,可以通过以下方式检索:

git clone http://acme.dev:7600/scm/project/component

go 1.8 客户端不知道如何根据 go get 参数获取组件,因此它执行 HTTPS get(根据 https://golang.org/cmd/go/#hdr-Remote_import_paths ):

https://acme.com/component?go-get=1

作为响应,它期望包含以下内容的 HTTP 200:

<head>
<meta name="go-import" content="acme.com/component git http://acme.dev:7600/scm/project/component">
</head>

HAProxy 很有吸引力,因为 Bitbucket Server SSL 终止程序使用它。如果它检测到后端正在响应特定的 URI,它有一个 monitor-uri hack 来返回 HTTP 响应,但我认为它不够灵活,无法处理不同的组件名称。

有谁知道使用 HAProxy 或其他工具(例如 NGinx)处理此问题的方法吗?

最佳答案

根据您需要如何自定义响应,这可以仅使用 HAProxy,编译时支持 Lua。在这里,将 HAProxy 1.6.12 与 Lua 5.3.4 结合使用,我采用请求路径并将其按原样放入响应中,以进行自定义——基本上任何路径都只是被复制进来。你也可以使用string.gsub() 如果你需要修改它。

一个小的 Lua 脚本:

-- /etc/haproxy/lua/custom-response.lua

core.register_service("magic-endpoint", "http", function(applet)
local response =
"<head>\r\n" ..
" <meta name=\"go-import\" content=\"example.com" .. applet.path ..
" git http://example.dev:7600/scm/project" .. applet.path ..
"\">\r\n</head>\r\n";
applet:set_status(200);
applet:add_header("Content-Length", string.len(response));
applet:add_header("Content-Type", "text/whatevs");
applet:start_response();
applet:send(response);
end)

以及配置中的相关行。我只是使用主机名将请求路由到后端,但您当然可以使用您需要的任何逻辑来触发它。

-- /etc/haproxy.cfg 

global
lua-load /etc/haproxy/lua/custom-response.lua

frontend main-frontend
mode http
bind :80
use_backend example if { hdr(host) -i example.com }

backend example
mode http
http-request use-service lua.magic-endpoint

然后,测试:

$ curl -v http://example.com/project1
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to example.com (127.0.0.1) port 80 (#0)
> GET /project1 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: example.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/whatevs
< Content-Length: 124
<
<head>
<meta name="go-import" content="example.com/project1 git http://example.dev:7600/scm/project/project1">
</head>

似乎是合法的。

关于git - 您如何使用 bitbucket 服务器支持 'go get'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821889/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com