나는 웹 서비스를 사용하여 websocket,그리고 필요한 구현 가동 중지 시간이 없는 배포합니다. 기 때문에 나는 원하지 않을 드롭 기존의 연결에 배포하고,내가 결정을 구현하는 파랑/녹색을 배포할 수 있습니다. 나의 실제적인 솔루션 내용:
- 내가 만든 두 개의 동일한 서비스에 portainer 듣고,서로 다른 포트에서. 모든 서비스는 설정 노드에 있는 환경부 식별 예를 들어,
alfa
고beta
- 두 서비스는 뒤에 숨겨진 로드 밸런서와 밸런서는 정기적으로 확인 상태의 각 서비스입니다. 는 경우에는 서비스 응답에서 특정한 경로(/분산-keepalive 확인)문자열"확인",이 서비스는 활성과 분산할 수 있는 라우팅을 이 서비스를 제공합니다. 는 경우 서비스의 응답으로 문자열"STOP",밸런서 이 서비스에 액세스 할 수없는,하지만 활성 연결이 유지됩
- 는 서비스가 활성화하고 있는 중입니다 동기화 redis. Redis 있는 열쇠
lb.service.alfa
고lb.service.beta
할 수 있는 값을 포함 1active0 을 위한 비활성화됩니다. 예 구현의 /분산-keepalive 인 경로에 nestjs:
import {Controller, Get} from '@nestjs/common';
import {RedisClient} from "redis";
const { promisify } = require("util");
@Controller()
export class AppController {
private redisClient = new RedisClient({host: process.env.REDIS_HOST});
private serviceId:string = process.env.ID; //alfa, beta
@Get('balancer-keepalive-check')
async balancerCheckAlive(): Promise<string> {
const getAsync = promisify(this.redisClient.get).bind(this.redisClient);
return getAsync(`lb-status-${this.serviceId}`).then(status => {
const reply: string = status == 1 ? 'OK' : 'STOP';
return `<response>${reply}</response>`;
})
}
}
- 에 gitlab CI 만들커 태그 이미지 태그에 투입하고,서비스 다시 시작 전화 portainer webhook 에 대한 특정한 서비스입니다. 이 잘 작동을 위한 1 서비스,그러나지 않을 사용하는 방법을 알고 2 다른 DEPLOY_WEBHOOK CI 변수들 사이를 전환합니다.
image: registry.rassk.work/pokec/pokec-nodejs-build-image:p1.0.1
services:
- name: docker:dind
variables:
DOCKER_TAG: platform-websocket:$CI_COMMIT_TAG
deploy:
tags:
- dtm-builder
environment:
name: $CI_COMMIT_TAG
script:
- npm set registry http://some-private-npm-registry-url.sk
- if [ "$ENV_CONFIG" ]; then cp $ENV_CONFIG $PWD/.env; fi
- if [ "$PRIVATE_KEY" ]; then cp $PRIVATE_KEY $PWD/privateKey.pem; fi
- if [ "$PUBLIC_KEY" ]; then cp $PUBLIC_KEY $PWD/publicKey.pem; fi
- docker build -t $DOCKER_TAG .
- docker tag $DOCKER_TAG registry.rassk.work/community/$DOCKER_TAG
- docker push registry.rassk.work/community/$DOCKER_TAG
- curl --request POST $DEPLOY_WEBHOOK
only:
- tags
나의 질문을 내가 알지 못하는 방법을 해결하고 있:
- 있을 때 2 는 서비스,나는 2 개의 서로 다른 배포 webhook 에서는 내가 필요로 중 하나를 호출한 후에 배포하기 때문에,나는 원하지 않는 다시 시작이 모두 서비스입니다. 을 확인하는 방법 중 하나? 구현 방법은 어떤 종류의 카운터,는 경우에는 이를 배포해"알파"또는"베타 서비스"? 를 사용해야 하 gitlab api 업데이트 DEPLOY_WEBHOOK 후 각 배포하시겠습니까? 또는 당신의 제거 나 이 gitlab CI/CD 변수 API 를 사용하는 서비스에는 것입니다.webhook url?
- 어떻게 업데이트 값에 redis? 어야 나는 사용자 정의를 구현을 위한 API 를 이?
- 는 존재가 있는 더 좋은 방법이 이것을 달성하는 방법?
추가 정보:이용할 수 없 gitlab api 에서 serviceses 기 때문에,우리의 gitlab 은 자체에서 호스팅하는 도메인에서만 액세스할 수 있습니다 우리의 개인 네트워크입니다.