我正在尝试使gcloud命令起作用,以便可以在Jenkins中运行它,但是我遇到了麻烦。
我在跑
gcloud --project=hv-match preview app deploy -q app.yaml --promote --verbosity debug --bucket gs://hv-match.appspot.com --version=1
这产生了这个:
DEBUG: Running gcloud.preview.app.deploy with Namespace(__calliope_internal_deepest_parser=ArgumentParser(prog=' gcloud.preview.app.deploy', usage=None, description="*(BETA)* This command is used to deploy both code and confi guration to the App Engine\nserver. As an input it takes one or more ``DEPLOYABLES'' that should be\nuploaded. A ``DEPLOYABLE'' can be a module's .yaml file or a configuration's\n.yaml file.", version=None, formatter_class =<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=False), account=None, bucket='gs://hv-matc h.appspot.com', cmd_func=<bound method Command.Run of <googlecloudsdk.calliope.backend.Command object at 0x1cd01 10>>, command_path=['gcloud', 'preview', 'app', 'deploy'], configuration=None, deployables=['app.yaml'], docker_ build=None, document=None, env_vars=None, force=False, format=None, h=None, help=None, http_timeout=None, log_ht tp=None, project='hv-match', promote=True, quiet=True, server=None, set_default=None, stop_previous_version=None , trace_email=None, trace_log=False, trace_token=None, user_output_enabled=None, verbosity='debug', version='1') . ERROR: Argument [app.yaml] is not a valid deployable file. DEBUG: (gcloud.preview.app.deploy) Errors occurred while parsing the App Engine app configuration. Traceback (most recent call last): File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/calliope/cli.py", line 589, in Execute result = args.cmd_func(cli=self, args=args) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/calliope/backend.py", line 1221, in Run resources = command_instance.Run(args) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/appengine/app_commands/deploy.py", line 184, in Run args.deployables, project, args.version or util.GenerateVersionId()) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/appengine/lib/yaml_parsing.py", line 351, in __init__ raise AppConfigSetLoadError() AppConfigSetLoadError: Errors occurred while parsing the App Engine app configuration. ERROR: (gcloud.preview.app.deploy) Errors occurred while parsing the App Engine app configuration.
这是我的app.yaml:
runtime: php55 api_version: 1 threadsafe: yes handlers: - url: /favicon\.ico static_files: favicon.ico upload: favicon\.ico - url: /phpinfo.php script: phpinfo.php - url: /tabell.php script: tabell.php - url: /lineup.php script: lineup.php - url: /nextgame.php script: nextgame.php - url: /pregame.php script: pregame.php - url: /forumtext.php script: forumtext.php - url: /livetabell.php script: livetabell.php - url: /abbreviation.php script: abbreviation.php - url: /SaveData.php script: SaveData.php login: admin - url: /test.html script: test.html - url: .* script: main.php env_variables: apfykey: '*string-with-api-key*'
从谷歌搜索到可能与欧洲/美国问题有关,我不确定我的项目在哪里,但我的虚拟机至少在美国。还是可以其他?
在此先感谢您的帮助!
当我通过Jenkins Execute Shell运行上面的命令时,我得到以下输出:
DEBUG: Running gcloud.preview.app.deploy with Namespace(__calliope_internal_deepest_parser=ArgumentParser(prog='gcloud.preview.app.deploy', usage=None, description="*(BETA)* This command is used to deploy both code and configuration to the App Engine\nserver. As an input it takes one or more ``DEPLOYABLES'' that should be\nuploaded. A ``DEPLOYABLE'' can be a module's .yaml file or a configuration's\n.yaml file.", version=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=False), account=None, bucket='gs://hv-match.appspot.com', cmd_func=<bound method Command.Run of <googlecloudsdk.calliope.backend.Command object at 0x320c210>>, command_path=['gcloud', 'preview', 'app', 'deploy'], configuration=None, deployables=['app.yaml'], docker_build=None, document=None, env_vars=None, force=False, format=None, h=None, help=None, http_timeout=None, log_http=None, project='hv-match', promote=True, quiet=True, server=None, set_default=None, stop_previous_version=None, trace_email=None, trace_log=False, trace_token=None, user_output_enabled=None, verbosity='debug', version='1'). DEBUG: API endpoint: [https://appengine.googleapis.com/], API version: [v1beta4] You are about to deploy the following modules: - hv-match/default (from [/opt/bitnami/apps/jenkins/jenkins_home/jobs/Deploy/workspace/app.yaml]) Deployed URL: [https://hv-match.appspot.com] Beginning deployment... DEBUG: Using bucket [gs://hv-match.appspot.com]. INFO: Ignoring directory [.git]: Directory matches ignore regex. INFO: Ignoring file [.gitignore]: File matches ignore regex. DEBUG: Generated deployment manifest: "{ *** removed for readability *** }" Copying files to Google Cloud Storage... Synchronizing files to [gs://hv-match.appspot.com]. DEBUG: Running command: [/bin/bash /usr/local/share/google/google-cloud-sdk/bin/gsutil -m rsync -R -c /tmp/tmpPvL87s gs://hv-match.appspot.com], Env: [None] Updating module [default]...DEBUG: Converted YAML to JSON: "{ *** removed for readability *** }" Updating module [default]...failed. DEBUG: (gcloud.preview.app.deploy) Error Response: [403] Request had insufficient authentication scopes. Traceback (most recent call last): File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/calliope/cli.py", line 589, in Execute result = args.cmd_func(cli=self, args=args) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/calliope/backend.py", line 1221, in Run resources = command_instance.Run(args) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/appengine/app_commands/deploy.py", line 250, in Run images.get(module)) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/appengine/lib/appengine_api_client.py", line 73, in DeployModule self.client.apps_modules_versions.Create, create_request) File "/usr/local/bin/../share/google/google-cloud-sdk/./lib/googlecloudsdk/appengine/lib/api/requests.py", line 41, in MakeRequest raise exceptions.HttpException(ExtractErrorMessage(error_json)) HttpException: Error Response: [403] Request had insufficient authentication scopes. ERROR: (gcloud.preview.app.deploy) Error Response: [403] Request had insufficient authentication scopes. Build step 'Execute shell' marked build as failure Finished: FAILURE
所以事情完全不同,我在这里茫然不知所措…
gcloud version
Google Cloud SDK 0.9.82 app 2015.10.08 bq 2.0.18 bq-nix 2.0.18 core 2015.10.08 core-nix 2015.09.03 gcloud 2015.10.08 gsutil 4.15 gsutil-nix 4.14
好的,我终于解决了我的问题!:)
在Google Cloud Shell中,我运行了:
PASSWORD=###%%%&&& # 12 or more chars, with letters and numbers PROJECT_ID=**PROJECT** BITNAMI_IMAGE=bitnami-jenkins-1-634-0-linux-debian-7-x86-64 # e.g. bitnami-jenkins-1-606-0-linux-debian-7-x86-64 gcloud compute \ instances create bitnami-jenkins2 \ --project ${PROJECT_ID} \ --image-project bitnami-launchpad \ --image ${BITNAMI_IMAGE} \ --zone us-central1-b \ --machine-type g1-small \ --metadata "bitnami-base-password=${PASSWORD},bitnami-default-user=CHANGEUSERNAMEHERE,bitnami-key=jenkins,bitnami-name=Jenkins,bitnami-url=//bitnami.com/stack/jenkins,bitnami-description=Jenkins,startup-script-url=https://dl.google.com/dl/jenkins/p2dsetup/setup-script.sh" \ --scopes "https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/compute,https://www,googleapis.com/auth/cloud.useraccounts,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/projecthosting,https://www.googleapis.com/auth/appengine.admin" \ --tags "bitnami-launchpad"
这创建了我的VM,但是使用了错误的用户,因为我通过上面的命令更改了用户名(无论如何,它都是使用“用户”创建的)。因此,我必须找到我的config.xml并将所有权限的用户名更改为正确的名称,并更新密码,并将默认用户名文件夹“ user”的文件夹重命名为我选择的用户名。
在那之后我几乎就在那里了,我缺少了一个必须启用的API。我去了 API和验证] > [API的云中的控制台,但找不到 AppEngine管理API我被放倒约在这里通过扎卡里(再次感谢花花公子!),但我已经错过了,你可以搜索超过100层的API和那些显示的不是唯一可用的,所以最终我找到了它。
我还必须为gcloud命令安装一些组件,这可以通过SSH进入虚拟机来完成。我安装了[preview]和[app]组件,以及更新了所有其他默认gcloud组件。
我的部署刚刚通过并更新了我的应用,非常感谢您的所有帮助!