【问题标题】:Got "ZIP does not support timestamps before 1980" while deploying a Go Cloud Function on GCP via Triggers通过触发器在 GCP 上部署 Go Cloud 功能时出现“ZIP 不支持 1980 年之前的时间戳”
【发布时间】:2019-11-14 17:47:10
【问题描述】:

问题: 我正在尝试在二级编译(second-level-compilation.yaml)中使用此步骤部署一个函数

- name: 'gcr.io/cloud-builders/gcloud'
  args: ['beta', 'functions',
       'deploy', '${_FUNCTION_NAME}',
       '--source', 'path/to/function',
       '--runtime', 'go111',
       '--region', '${_GCP_CLOUD_FUNCTION_REGION}',
       '--entry-point', '${_ENTRYPOINT}',
       '--env-vars-file', '${_FUNCTION_PATH}/.env.${_DEPLOY_ENV}.yaml',
       '--trigger-topic', '${_TRIGGER_TOPIC_NAME}',
       '--timeout', '${_FUNCTION_TIMEOUT}',
       '--service-account', '${_SERVICE_ACCOUNT}']

我使用控制台从 Cloud Build 收到此错误。

第 1 步:第 11 步:错误:(gcloud.beta.functions.deploy) 使用目录 path/to/function 的源代码创建 ZIP 存档时出错:ZIP 不支持 1980 年之前的时间戳

这是全局流程:

  1. 接下来的步骤是在一级编译(first-level-compilation.yaml)。这是由 Cloud build 使用 Github 存储库触发的(通过 Application GitHub Cloud Build):

    - name: 'gcr.io/cloud-builders/gcloud'
      entrypoint: 'bash'
      args: ['-c', 'launch-second-level-compilation.sh ${_MY_VAR}']
    
  2. 脚本“launch-second-level-compilation.sh”基于 ${_MY_VAR} 执行特定操作,然后启动二级编译,通过“gcloud builds submit --config”传递大量替换变量=second-level-compilation.yaml --substitutions=_FUNCTION_NAME=val,_GCP_CLOUD_FUNCTION_REGION=val,....."

  3. 然后,使用生成并通过 launch-second-level-compilation.sh 脚本传递的替换值执行本问题开头描述的“second-level-compilation.yaml”。

这里的主要思想是让一个通用的第一级编译.yaml 负责调用具有特定动态生成替换的第二级编译。

尝试/调查

  1. 如本期Cloud Container Builder, ZIP does not support timestamps before 1980 中所述,我尝试“ls”/workspace 目录中的文件。但是 /workspace 根目录下的所有文件都没有奇怪的 DATE。

  2. 我将 path/to/function 从相对路径更改为 /workspace/path/to/function,但没有成功,因为目录最终相同。

【问题讨论】:

  • 在您的“ls”测试中,您是否递归地列出了文件? /workspace 目录本身的日期/时间呢?
  • 您是否能够在没有额外间接的情况下部署 Go Cloud Function?可能不相关,Go Cloud Functions 已经过测试版,因此您不需要 gcloud 命令中的 beta arg。
  • 感谢您的反馈。我们最终暂时只进行了一级编译。更易读的实现,但需要更具体的东西和变量在部署之前明确定义。

标签: go google-cloud-functions google-cloud-build


【解决方案1】:

请确保您没有没有文件的文件夹。例如:

|--dir
   |--subdir1
   |  |--file1
   |--subdir2
      |--file2

在此示例中,dir 不直接包含任何文件,仅包含子目录。在本地部署期间,gcp sdk 将dir 放入压缩包中,而不复制last modified 字段。 所以它设置为1st Jan 1970,这会导致 ZIP 出现问题。

尽可能的解决方法是确保每个目录都至少包含一个文件。

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 2018-08-26
    • 2020-11-09
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2021-03-29
    • 2021-02-24
    • 2021-04-30
    相关资源
    最近更新 更多