Так что я довольно застрял, но так близко к тому, чтобы получить проект Google Apps Script для развертывания и развертывания с помощью Clasp через Googles Cloudbuild.Таким образом, команды 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, так что здесь есть ссылка на реальный проект, если вам нужна ссылка на реальный код. Мой Lil Admin и строитель, который я использовал Мои Строители .Однако вам действительно не нужен проект, чтобы воспроизвести, следуйте инструкциям ниже на вашем местном.
- убедитесь, что создан проект GCP, а gcloud cli с включенным API сценариев Apps
- имеет clasp cli с
npm install -g @google/clasp
clasp login
для получения .clasprc.json
и авторизации с GCP clasp create --title "My Script" --type webapp
и обратите внимание на идентификатор сценариев - , связывающий проект сценариев приложений с вашим проектом GCP
Следующие шаги представляют собой файлы, которые приводят к проблеме.Просто добавьте их в созданный проект clasp.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 "$@"
Строитель 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"]
теперь облако строит, чтобы подтолкнуть конструктор застежки
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
в шагах
push
и
deploy
.Это довольно специфично для проекта в ссылках на мой проект выше.
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
на ваш фактический идентификатор проекта.
cd builder && gcloud builds submit --project yourproject --config=cloudbuild.yaml .
команда, чтобы наконец получить ошибку.Обязательно замените
yourproject
на действительный идентификатор проекта, а
your_script_id
- на действительный идентификатор сценария, который вы приняли к сведению на шаге 4.
gcloud builds submit --project yourproject --config=cloudbuild.yaml . \
--substitutions=_CLASPRC="$(cat $HOME/.clasprc.json)" \
--substitutions=_SCRIPT_ID="your_script_id"
Я также пытался использовать учетные данные, созданные извход в систему с OAuth, но я получил ту же ошибку.Однако это может быть полезно при решении проблемы. Документы для Clasp Run с OAuth
Надеюсь, кто-нибудь может помочь мне заставить это работать.Если это так, то это будет первая документация в Интернете для Cloudbuild CI с Apps Script и Clasp, так как я не могу найти никого, кто бы делал это где-либо.Я нашел некоторые ссылки, используя Трэвиса и Дженкинса, но то, что они делают по какой-то причине, не работает.Кто-нибудь видит что-то, чем я не являюсь?Что мне здесь не хватает?!?!
Некоторые другие, несколько связанные или никогда не решаемые проблемы: