如何使用travis和docker将图形推送到Apollo Graph Manager

问题描述 投票:0回答:1

我正在研究阿波罗联邦。到目前为止,我已经使用travis将服务成功部署到了google kubernetes集群。

唯一剩下的问题是,包括我的CI / CD中的apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth脚本。但是我不知道如何。这是我第一次设置CI / CD。

没有apollo service:push的我的有效travis配置文件是:

sudo: required
services:
  - docker
env:
  global:
    - SHA=$(git rev-parse HEAD)
    - CLOUDSDK_CORE_DISABLE_PROMPTS=1
language: node_js
node_js:
  - 10
before_install:
  - openssl aes-256-cbc -K $encrypted_9f3b5599b056_key -iv $encrypted_9f3b5599b056_iv -in service-account.json.enc -out service-account.json -d
  - curl https://sdk.cloud.google.com | bash > /dev/null;
  - source $HOME/google-cloud-sdk/path.bash.inc
  - gcloud components update kubectl
  - gcloud auth activate-service-account --key-file service-account.json
  - gcloud config set project salading-production
  - gcloud config set compute/zone asia-northeast3-a
  - gcloud container clusters get-credentials salading-cluster
  - echo "$SHA"
  - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
script:
  - echo "skipping tests"
deploy:
  provider: script
  script: bash ./deploy.sh
  on:
    branch: master

下面是deploy.sh文件:

docker build -t hoffnung8493/salading-auth:latest -t hoffnung8493/salading-auth:$SHA .
docker push hoffnung8493/salading-auth:latest
docker push hoffnung8493/salading-auth:$SHA
kubectl apply -f k8s
kubectl set image deployment/auth-deployment auth=hoffnung8493/salading-auth:$SHA

我尝试在deploy.sh中添加两行:

npm i -g apollo
apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth --endpoint=http://auth-cluster-ip-service

并出现以下错误:

Loading Apollo Project [started]
Loading Apollo Project [completed]
Uploading service to Apollo Graph Manager [started]
Fetching info from federated service
Uploading service to Apollo Graph Manager [failed]
→ request to http://auth-cluster-ip-service/ failed, reason: getaddrinfo ENOTFOUND auth-cluster-ip-service auth-cluster-ip-service:80
FetchError: request to http://auth-cluster-ip-service/ failed, reason: getaddrinfo ENOTFOUND auth-cluster-ip-service auth-cluster-ip-service:80
    at ClientRequest.<anonymous> (~/.nvm/versions/node/v10.19.0/lib/node_modules/apollo/node_modules/node-fetch/lib/index.js:1455:11)
docker kubernetes travis-ci apollo
1个回答
0
投票

好吧,当我在stackoverflow中键入自己的问题时,我想出了解决方案。由于我已经输入完问题,因此决定共享解决方案。

事实证明,一个简单的解决方案是在after_deploy文件的.travis.yml中简单地添加5行代码。npm run dev &:这将在后台运行节点服务器之后,sleep 3给服务器一些时间来打开电源。最后,最后的代码将新的graphql模式推入Apollo Graph Manager。请注意,在travis-ci.com的设置中,您必须添加apollo的ENGINE_API_KEY作为环境变量。另请注意,您的节点服务器可以打印出一些连接错误。就我而言,我没有提供redis和mongodb连接相关的环境变量。但是只要服务器本身正在运行以进行内省,apollo service:push就可以正常工作。

sudo: required
services:
  - docker
env:
  global:
    - SHA=$(git rev-parse HEAD)
    - CLOUDSDK_CORE_DISABLE_PROMPTS=1
language: node_js
node_js:
  - 10
before_install:
  - openssl aes-256-cbc -K $encrypted_9f3b5599b056_key -iv $encrypted_9f3b5599b056_iv -in service-account.json.enc -out service-account.json -d
  - curl https://sdk.cloud.google.com | bash > /dev/null;
  - source $HOME/google-cloud-sdk/path.bash.inc
  - gcloud components update kubectl
  - gcloud auth activate-service-account --key-file service-account.json
  - gcloud config set project salading-production
  - gcloud config set compute/zone asia-northeast3-a
  - gcloud container clusters get-credentials salading-cluster
  - echo "$SHA"
  - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
script:
  - echo "skipping tests"
deploy:
  provider: script
  script: bash ./deploy.sh
  on:
    branch: master
after_deploy:
  - npm install
  - npm i -g apollo
  - npm run dev &
  - sleep 3
  - apollo service:push --serviceURL=http://auth-cluster-ip-service --serviceName=auth --endpoint=http://localhost:3051
© www.soinside.com 2019 - 2024. All rights reserved.