Shell 시리즈 (4) - 백 엔 드 프로젝트 가 자동 으로 배 치 된 Shell 스 크 립 트 를 인 스 턴 스 로 해석 합 니 다.

4373 단어
백 엔 드 구조:
회사 백 엔 드 는 Kubernetes + OpenFaa S + Flask 의 구 조 를 채택 했다.openfaas 는 FaaS 서 비 스 를 제공 합 니 다.모든 fllask 프로젝트 는 하나의 function 에 구체 적 으로 배치 되 어 있 으 며, 하나의 function 은 하나의 docker 용기 에 배치 되 어 있 으 며, 각 function 간 에 서로 독립 되 어 있 으 며, 모든 백 엔 드 가 같은 작업 항목 을 조작 할 때 논리 적 독립 성 을 확보 합 니 다.
스 크 립 트 적용 필드:
스 크 립 트 배치 필요 성:
  • openfaas 의 배 치 는 yml 파일 을 자동 으로 생 성 해 야 합 니 다
  • 실제 배치 단 계 는 생산 환경 (dev 개발, stage 사전 발표, prod 정식, test 테스트)
  • 을 구분 해 야 한다.
  • yml 의 생 성 결 과 는 동적 화 되 어야 합 니 다. 예 를 들 어 백 엔 드 의 모든 항목 이 다 르 고 하나의 항목 은 하나의 faas function 에 해당 하기 때문에 functionname 사람마다 다 를 수 밖 에 없어 요.

  • 코드 구현:
    안에 비교적 중요 한 파일 들 이 있 습 니 다.
  • template. yml: OpenFaaS Function 에 배 치 된 템 플 릿 yml 은 수 동 으로 수정 해 야 합 니 다. 스 크 립 트 를 통 해 이 절 차 를 자동화 해 야 합 니 다
  • $0: 현재 실행 할 스 크 립 트 이름 입 니 다. "deploy. sh"
  • 일 수 있 습 니 다.
  • deploy. yml: 템 플 릿 을 수정 하여 얻 은 yml, OpenFaas 배치 에 사용
  • 변수 env: 배 치 를 제어 하 는 환경의 구체 적 인 스 크 립 트 해석 은 코드 설명 을 보십시오.
  • // 具体名称已隐去
    "deploy.sh"
    #!/usr/bin/env bash
    
    #function_basename=$(basename `pwd`)
    function_basename="xx"  # function name,即openfaas function的名称,项目名称
    
    env=$1   # 需要部署的环境的名称,$1即为后面第一位输入的参数
    
    option=$2  # 执行的操作,如deploy为部署
    # 前几行定义了整个脚本的操作,如 sh deploy.sh dev deploy,表明这个操作可以自动化整个项目到dev开发环境的部署
    
    # 分配faas_gateway(openfaas的具体路由)
    # 在使用变量时,如果不修改操作,调用变量需要加${env}
    # 大括号的作用是隔离,如${A}B和$AB是完全不一样的含义。
    # 定义了-h/--help的含义,一个instructions,为操作全过程的介绍。
    case ${env} in
        dev|test)
            faas_gateway="xx1"
            faas_gateway_="xx2"
            ;;
        prod|stage)
            faas_gateway="xx3"
            faas_gateway_="xx4"
            ;;
        *|-h|--help)
            echo "$0:usage: [ test ] | [ prod ] | [ dev ] | [ stage ] 
    " echo "Env:" echo "\ttest Testing Env" echo "\tprod Prod Env" echo "\tdev Dev Env" echo "\tstage Stage Env
    " echo "Available Commands:" echo "\tbuild Builds OpenFaaS function containers" echo "\tdeploy Deploy OpenFaaS functions" echo "Examples:" echo "\tsh deploy.sh test [ build | deploy ]" echo "\tsh deploy.sh prod [ build | deploy ]" echo "\tsh deploy.sh dev [ build | deploy ]" echo "\tsh deploy.sh stage [ build | deploy ]
    " echo "Use \"sh $0 -h\" for more information about a command." exit 1 ;; esac # if [ -f "..." ]; 意为检查引号内文件是否存在,如果存在执行步骤,不存在执行另一步骤 if [ -f "./template.yml" ];then echo "template.yml exists." else # 重定向内容,cat << EOF ... EOF会将EOF开始和结束中间的内容作为输入 # 再通过">"将内容重定向到template.yml # 这里的含义就是判断如果这个template模板不存在,创建一个 cat > template.yml < deploy.yml # faas cli 操作 u/p登录 faas-cli login -g $faas_gateway -u xx --password 'xx' # option如果是build,用Dockerfile去build,但并不deploy if [ "$option" = "build" ];then function_name=$env-$function_name fi faas-cli build -f deploy.yml --build-arg FLASK_ENV=$env faas-cli push -f deploy.yml echo "Version:$new_version" if [ "$option" = "deploy" ];then faas-cli deploy -f deploy.yml echo '======deploy success======' echo [function]: $function_name echo [version ]: $new_version echo [image ]: xx.cn/xx/$docker_name:$new_version echo '==========================' echo ' ' else echo '======build success======' echo [function]: $function_name echo [version ]: $new_version echo [image ]: xx.cn/xx/$docker_name:$new_version echo '=========================' echo ' ' fi # build完后,项目代码中删除build目录,本地并不需要 rm -rf ./build

    이상 은 자동화 배치 문제 에 대한 작은 사고 입 니 다 ~ 구조 가 다 르 면 그 중의 동태 적 인 수정 을 참고 하여 자신의 프로젝트 에 사용 할 수 있 습 니 다. 특히 시간 이 tag 를 대체 하 는 등 이런 방법 으로 한 줄 의 명령 으로 배 치 를 완성 하 는 요 구 를 실현 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기