我正在尝试为几个 Python 项目(所有 GAE/GCF)设置 CI/CD。我可以很好地部署代码,但我想在部署步骤之前运行整个测试套件。我怎样才能做到这一点?我是否必须设置整个 docker 构建步骤才能完成此操作,还是有更简单的方法?
通过提交 Cloud Build 运行时,gcloud builds submit ...我收到禁止错误,指出我无权访问存储桶。提交 Cloud Build 通常会涉及到存储桶的两个地方:暂存存储桶和日志存储桶。我将每个存储桶指定为我也有权访问的存储桶(相同的存储桶,只是不同的文件夹),因此命令如下所示:
gcloud builds submit
--gcs-log-dir $my_bucket/logs
--gcs-source-staging-dir $my_bucket/source
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ERROR: (gcloud.builds.submit) 403: The user is forbidden from accessing the bucket [$my_bucket]: Please check your organization's policy.
Run Code Online (Sandbox Code Playgroud)
--log-http我用and重新运行--verbosity debug,扩展的错误显示了真正的原因:
DEBUG: https://storageapis.google.com "GET /storage/v1/b/$my_bucket?alt=json"
...
{
"error": {
"code": 403,
"message": "$user does not have serviceusage.services.use access to the Google Cloud Project."
}
}
Run Code Online (Sandbox Code Playgroud)
我做了一些挖掘,发现在向请求提供配额/计费项目时会出现此错误(除了没有服务使用者角色之外)。我在检查请求的 HTTP 标头(其中包括X-Goog-User-Project: $my_project.
奇怪的是,我可以访问此存储桶中的对象,并且可以gsutil很好地运行 /HTTP 命令,这些命令使用相同的 API 端点,区别gsutil …
google-cloud-storage google-cloud-platform google-cloud-build
我不确定我在我的问题中是否使用了正确的措辞,但我遇到的情况是我正在调用一个函数并将值传递给它的命名关键字参数之一,只有当我有一个值时。我目前如何做的一个简化示例:
var_1 = data.get("var_1", None)
if var_1:
some_function(some_arg=var_1)
else:
some_function()
Run Code Online (Sandbox Code Playgroud)
该函数some_function()不接受设置some_arg为 None 所以我只能使用命名参数调用该函数,如果我有一个有效的值。
以上对我来说不太理想的原因是我正在执行的实际函数调用有一堆(5+)我设置的命名参数。这会导致重复大多数相似的函数调用,这些函数调用只有一个参数不同。
有没有更好的方法/更 Pythonic 的方法来做到这一点?我希望我可以调用该函数并设置我可能希望传递的所有可能的命名参数,但在运行时,只传递我实际需要的值。
万一重要,函数调用是对 AWS Python SDK (Boto3) 的,所以我不能改变函数的行为。
我在单独的 git 存储库中拥有 Python 项目 A、B 和 C。他们在每个代码中都使用了一些类似的代码,因此我想将代码重构到一个单独的共享存储库中。此存储库中的 Python 代码实际上只是一些帮助程序类。我可以将这个新存储库中的文件作为 git 子模块包含在项目 A、B 和 C 中。
我现在遇到的问题是,如果 git 子模块中的代码具有外部 pip 依赖项,那么除了自己的依赖项之外,顶级项目如何解决这些依赖项?
也许 git-submodules 在这里不是正确的方法,但我真的想避免为 3-4 个轻量级模块/类设置私有 pypi 服务器。
我需要访问n和n+1一个列表的元素.例如,如果我的列表是[1,2,3,4,5]和我的第n个元素2,我需要列表中的下一个元素,3.
具体来说,我需要访问这些元素,以便使用它们在矩阵A中查找值
我有一个迭代遍历列表的for循环:
list = [1,2,3,4,5]
for i in list:
value = A[i,i+1] #access A[1,2], A[2,3], A[3,4], A[4,5]
Run Code Online (Sandbox Code Playgroud)
这个问题是我无法进行i+1操作来访问n+1列表中的元素.这是我第一次用Python编程,我假设元素访问与C/C++中的相同,但事实并非如此.任何帮助,将不胜感激.
我的代码中出现 Unhandled Rejection 错误,但跟踪不会告诉我是什么原因造成的。我认为这webp.cwebp是导致问题的电话。当我运行代码时,我成功转换了图像和日志状态,然后遇到了未处理的拒绝。似乎我没有进入最后两个.then(()块,因为没有从它们记录控制台消息。
如何正确处理拒绝错误以避免此错误?我试过status在resolve()andreject()语句中插入和删除,但它似乎没有修复它。
// Download image file from Google Cloud Storage bucket.
return file.download({ destination: tempLocalFilename })
.catch((err) => {
console.error('Failed to download file.', err);
return Promise.reject(err);
})
.then(() => {
console.log(`Image ${file.name} has been downloaded to ${tempLocalFilename}.`);
// Convert PNG to webp using webp-converter.
return new Promise( (resolve, reject) => {
webp.cwebp(tempLocalFilename, newLocalFilename, "-q 80", status => {
console.log(status);
if (status === '100') {
resolve();
} else …Run Code Online (Sandbox Code Playgroud) 是否可以使用 Admin API 更新 GAE Flex 环境的最小总实例数?
我已经尝试使用客户端库以及 Web API 资源管理器,但我不断收到 400 响应 "Frontend automatic scaling should NOT have the following parameter(s): [min_total_instances]"
我的更新掩码是: automaticScaling.min_total_instances
我的请求正文是:
{
"automaticScaling": {
"minTotalInstances": 4
}
Run Code Online (Sandbox Code Playgroud)
我尝试了更新掩码的不同变体,但仍然出现相同的错误。根据文档,这个操作应该是可以的。
我想在我的私有 GKE 集群中部署 nginx-ingress-controller 映像 ( https://github.com/kubernetes/ingress-nginx ),但我无法提取该映像,因为它位于 quay.io 的注册表中。如何提取不在 GCR 或 GCR Dockerhub 镜像上的公共镜像?
我考虑过将其拉出并上传到我自己的 GCR 注册表,但随后我必须保持更新它。有没有办法保留该图像的私人镜像?