我正在使用 docker 运行 Localstack 和 image 0.11.1。我打开了es服务并暴露了端口4566- 根据文档(https://github.com/localstack/localstack):
从 0.11.0 版本开始,所有 API 都通过单个边缘服务公开,默认情况下可通过http://localhost:4566访问
我可以成功地使用 AWS CLI 列出域名并创建域名:
aws --endpoint-url=http://localhost:4566 es list-domain-names
aws --endpoint-url=http://localhost:4566 es create-elasticsearch-domain --domain-name my-domain --elasticsearch-version 7.4
Run Code Online (Sandbox Code Playgroud)
但是当我尝试索引文档时
curl -XPUT http://localhost:4566/my-domain/_doc/1 -d '{"hello": "World"}' -H 'Content-Type: application/json'
Run Code Online (Sandbox Code Playgroud)
它回复{"status": "running"}了我,我在日志中看到了消息:
信息:localstack.services.edge:无法找到主机“localhost:4566”的转发规则,路径“/my-domain/_doc/1”,目标标头“”,身份验证标头“”
然后我4571通过在 docker-compose.yml 中配置它来将端口添加到暴露的端口并尝试相同,但这次使用http://localhost:4571/my-domain/_doc/1 url 来索引文档。
curl -XPUT http://localhost:4571/my-domain/_doc/1 -d '{"hello": "World"}' -H 'Content-Type: application/json'
Run Code Online (Sandbox Code Playgroud)
有效。
我不明白 - 根据文档,我应该只使用端口,4566但它不起作用。我错过了什么吗?
我的 docker-compose.yml 暴露了两个端口:
... …Run Code Online (Sandbox Code Playgroud) 我可以像这里的示例中所解释的那样获取凭据 - https://jenkins.io/doc/book/pipeline/syntax/#environment
stage('Example') {
environment {
CREDS = credentials('MY_CREDS_DEV')
}
steps {
sh 'echo hello'
}
}
Run Code Online (Sandbox Code Playgroud)
但我想做的是根据某些条件获得凭证。
例如,我已经在 Jenkins 凭证中定义了MY_CREDS_DEV。MY_CREDS_QA我ENV=dev在 Jenkins 的“为运行准备环境”部分中定义了一个属性。
我想根据我的环境(即ENV属性)访问凭据。
我尝试使用CREDS = credentials('MY_CREDS_' + ${ENV})并尝试将字符串连接提取到一个单独的函数并像这样调用它,CREDS = credentials(concatenate(${ENV}))但我得到了Internal function call parameters must be strings.
所以看来我只能将一个字符串放入credentials()函数中,这基本上意味着对其进行硬编码。但是我如何选择使用哪些凭据 - dev 或 qa?