gpt4 book ai didi

google-apps-script - Google Apps 脚本和 Cloudbuild CI 登录

转载 作者:行者123 更新时间:2023-12-03 09:31:32 28 4
gpt4 key购买 nike

因此,我非常困难,但非常接近于通过 Googles Cloudbuild 使用 Clasp 推送和部署 Google Apps Script 项目。所以 push 和 deploy 命令来自 Googles Clasp cli 要求您使用 Google 凭据登录 clasp login .登录将在您的主目录中创建一个名为 ~/.clasprc.json 的文件。与您的凭据。这是推送和部署所必需的。在 cloudbuild.yaml我创建了一个名为 _CLASPRC 的替换保存此文件的内容并在运行构建时使用我自己的自定义镜像将其写入容器。

现在对于这个问题,当 push 命令运行时,我收到以下错误,这基本上不是说我没有登录或任何其他错误的非常有用的方式 .clasprc.json .由于这是我遇到的唯一错误,无论问题是什么,这个问题有点难以调试。

Could not read API credentials. Are you logged in globally?

我试过把 .clasprc.json在主目录和项目目录中,但两种方式都遇到相同的问题。我很确定该文件正在写入项目目录,因为当我尝试在没有 .clasp.json 的情况下在本地运行时它在提示我没有登录之前提示它丢失了。当 .clasp.json在那里它只提示我没有登录。

该项目只是我的一个个人项目,它在 Github 上都是开源的,所以如果你想引用实际代码,这里是实际项目的链接。 My Lil Admin和我使用的构建器 My Builders .但是,您确实不需要该项目,请按照以下步骤在本地进行重现。
  • 确保创建了一个 GCP 项目和 gcloud cli启用 Apps 脚本 API
  • npm install -g @google/clasp 安装扣环 cli
  • clasp login获得 .clasprc.json并使用 GCP 进行身份验证
  • clasp create --title "My Script" --type webapp并记下脚本 ID
  • associate the apps script project with your GCP project

  • 以下步骤是导致问题的文件。只需将它们添加到创建的扣项目中即可。
    6. 这是我的 Clasp Builder Image 的入口点:
    builder/clasp_ci.sh
    #!/bin/bash

    # if there is a _CLASPRC var and no .clasprc.json file
    if [ ! -z "${_CLASPRC}" -a ! -f "${HOME}/.clasprc.json" ]; then
    echo $_CLASPRC > "$HOME/.clasprc.json"
    fi

    # if there is a _SCRIPT_ID and PROJECT_ID and no .clasp.json file
    if [ ! -z "${_SCRIPT_ID}" -a ! -z "$PROJECT_ID" -a ! -f ".clasp.json" ]; then
    cat > '.clasp.json' << EOF
    {"scriptId":"$_SCRIPT_ID","projectId": "$PROJECT_ID"}
    EOF
    fi

    # pass args to clasp
    clasp "$@"
  • build 者 dockerfile
  • builder/Dockerfile
    # use Node LTS (Boron)
    FROM node:8.16.1

    COPY clasp_ci.sh /usr/local/bin/clasp_ci

    # install Clasp CLI
    RUN npm install -g @google/clasp && \
    chmod +x /usr/local/bin/clasp_ci

    ENTRYPOINT ["/usr/local/bin/clasp_ci"]
  • 现在 cloudbuild 来插入搭扣构建器
  • builder/cloudbuild.yaml
    steps:
    - name: 'gcr.io/cloud-builders/docker'
    args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/clasp', '.' ]
    images:
    - 'gcr.io/$PROJECT_ID/clasp'
  • 我的 cloudbuild ci 用于应用程序脚本项目。如果您正在制作一个新项目,则不需要构建步骤,也不需要 dir关键在 pushdeploy脚步。这非常特定于我上面项目链接中的项目。
  • cloudbuild.yaml
    steps:

    - id: install
    name: 'gcr.io/cloud-builders/npm'
    args: ['install']

    - id: build-server
    name: 'gcr.io/cloud-builders/npm'
    args: ['run','gas']
    env:
    - 'NODE_ENV=production'

    - id: build-client
    name: 'gcr.io/cloud-builders/npm'
    args: ['run','prod']
    env:
    - 'NODE_ENV=production'

    - id: push
    name: 'gcr.io/$PROJECT_ID/clasp'
    dir: './dist/gas'
    args: ['push','-f']

    - id: deploy
    name: 'gcr.io/$PROJECT_ID/clasp'
    dir: './dist/gas'
    args: ['deploy','$TAG_NAME']

    substitutions:
    _CLASPRC: 'your clasp rc file in your home dir after logging in locally'
    _SCRIPT_ID: 'your script id of the apps script project to deploy to'
  • 这是加载构建器的命令。确保更换 yourproject使用您的实际项目 ID。
  • cd builder && gcloud builds submit --project yourproject --config=cloudbuild.yaml .
  • 最终得到错误的命令。确保更换 yourproject使用您的实际项目 ID 和 your_script_id使用您在步骤 4 中记下的实际脚本 ID。
  • gcloud builds submit --project yourproject --config=cloudbuild.yaml . \
    --substitutions=_CLASPRC="$(cat $HOME/.clasprc.json)" \
    --substitutions=_SCRIPT_ID="your_script_id"

    我也尝试使用通过 OAuth 登录创建的凭据,但我得到了完全相同的错误。但是,这可能有助于解决问题。 Docs for Clasp Run with OAuth

    希望有人可以帮助我完成这项工作。如果是这样,这将是带有 Apps Script 和 Clasp 的 Cloudbuild CI 的第一个在线文档,因为我在任何地方都找不到这样做的人。我发现了一些使用 travis 和 jenkins 的链接,但由于某种原因他们正在做的事情不起作用。有没有人看到我不是什么东西?我在这里错过了什么?!?!

    其他一些相关或从 Unresolved 问题:
  • https://github.com/google/clasp/issues/524
  • https://github.com/google/clasp/blob/master/tests/README.md
  • https://github.com/google/clasp/issues/225
  • https://github.com/gazf/google-apps-script-ci-starter
  • 最佳答案

    好的,经过一堆调试后,我发现 cloudbuild 替换变量不会转换为容器中的环境变量。您必须手动将环境变量设置为替换变量,然后容器将获取所需的变量。

    这是更新的 CI 入口点:
    builder/clasp_si.sh

    #!/bin/bash

    if [ ! -z "${CLASPRC}" -a ! -f "${HOME}/.clasprc.json" ]; then
    echo $CLASPRC > "${HOME}/.clasprc.json"
    fi

    if [ ! -z "${SCRIPT_ID}" -a ! -z "$PROJECT_ID" -a ! -f ".clasp.json" ]; then
    cat > '.clasp.json' << EOF
    {"scriptId":"$SCRIPT_ID","projectId": "$PROJECT_ID"}
    EOF
    fi

    clasp "$@"

    然后是更新的 cloudbuild 配置:
    cloudbuild.yaml
    steps:

    - id: install
    name: 'gcr.io/cloud-builders/npm'
    args: ['install']

    - id: build-server
    name: 'gcr.io/cloud-builders/npm'
    args: ['run','gas']
    env:
    - 'NODE_ENV=production'

    - id: build-client
    name: 'gcr.io/cloud-builders/npm'
    args: ['run','prod']
    env:
    - 'NODE_ENV=production'

    - id: push
    name: 'gcr.io/$PROJECT_ID/clasp'
    dir: './dist/gas'
    args: ['push','-f']
    env:
    - 'CLASPRC=$_CLASPRC'
    - 'SCRIPT_ID=$_SCRIPT_ID'
    - 'PROJECT_ID=$PROJECT_ID'

    - id: deploy
    name: 'gcr.io/$PROJECT_ID/clasp'
    dir: './dist/gas'
    args: ['deploy','$TAG_NAME']
    env:
    - 'CLASPRC=$_CLASPRC'
    - 'SCRIPT_ID=$_SCRIPT_ID'
    - 'PROJECT_ID=$PROJECT_ID'

    substitutions:
    _CLASPRC: 'your clasp rc file in your home dir after logging in locally'
    _SCRIPT_ID: 'your script id of the apps script project to deploy to'

    关于google-apps-script - Google Apps 脚本和 Cloudbuild CI 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58084772/

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