我无法真正理解极其简洁的文档 - 我的用例是我在 Artifactory 中的已知 URL 上有一个文件,我想下载它。为此,我需要通过 Artifactory 进行身份验证。
我有这个代码:
func authenticateToArtifactory() string {
rtDetails := auth.NewArtifactoryDetails()
rtDetails.SetUrl(artifactoryURL)
fmt.Printf("Artifactory login name....\n")
var userName string
fmt.Scanln(&userName)
fmt.Printf("Artifactory password....\n")
var passWord string
fmt.Scanln(&passWord)
rtDetails.SetUser(userName)
rtDetails.SetPassword(passWord)
apiKey := rtDetails.GetAPIKey()
fmt.Printf("API key is %s\n", apiKey)
return apiKey
}
但它不起作用 - 说实话,这并不奇怪,因为甚至没有定义 getAPIKey() 调用 - 但我真的不知道在这里做什么。
正确的做法是什么?
编辑:通过阅读周围的内容,我认为我可能必须为此使用http客户端 - 即我无法直接通过Artifactory进行身份验证:这是正确的吗?
经过大量的挫折和反复试验后,我认为我已经可以正常工作了 - 文档非常糟糕,所以我确实希望这对其他人有帮助。
这是一个基本设置...(获取所有这些尾随的“/”是必不可少的,据我所知,没有记录了这些):
var artifactoryURL = "https://your.remote.server/artifactory/"
rtDetails := auth.NewArtifactoryDetails()
rtDetails.SetUrl(artifactoryURL)
fmt.Printf("Artifactory login name....\n")
var userName string
userName = [some way of getting user name eg via command line]
fmt.Printf("Artifactory password....\n")
var passWord string
passWord = [some way of getting artifactory password eg via command line]
rtDetails.SetUser(userName)
rtDetails.SetPassword(passWord)
artifactoryHTTP := &http.Client{Transport: &http.Transport{}}
serviceConfig, err := config.NewConfigBuilder().SetServiceDetails(rtDetails).SetDryRun(false).SetHttpClient(artifactoryHTTP).Build()
if err != nil {
panic(err)
}
rtManager, errSC := artifactory.New(serviceConfig)
if errSC != nil {
panic(errSC)
}
params := services.NewDownloadParams()
params.Pattern = "[repo_name]/path/to/your/file/your_file"
_, _, err = rtManager.DownloadFiles(params)
if err != nil {
fmt.Printf("%s\n", err.Error())
panic(err)
}
存储库名称是文件 URL 后的第一位神器:例如
http://my.server.address/artifactory/repo_name/blah/blah/blah/file_I_want.tar.gz
添加 - 贡献者建议突出显示: auth.NewArtifactoryDetails() 此方法存在于此“github.com/jfrog/jfrog-client-go/artifactory/auth”包中,而不是此包“github.com/jfrog”中/jfrog-client-go/auth”