Shell 시리즈 (4) - 백 엔 드 프로젝트 가 자동 으로 배 치 된 Shell 스 크 립 트 를 인 스 턴 스 로 해석 합 니 다.
회사 백 엔 드 는 Kubernetes + OpenFaa S + Flask 의 구 조 를 채택 했다.openfaas 는 FaaS 서 비 스 를 제공 합 니 다.모든 fllask 프로젝트 는 하나의 function 에 구체 적 으로 배치 되 어 있 으 며, 하나의 function 은 하나의 docker 용기 에 배치 되 어 있 으 며, 각 function 간 에 서로 독립 되 어 있 으 며, 모든 백 엔 드 가 같은 작업 항목 을 조작 할 때 논리 적 독립 성 을 확보 합 니 다.
스 크 립 트 적용 필드:
스 크 립 트 배치 필요 성:
코드 구현:
안에 비교적 중요 한 파일 들 이 있 습 니 다.
// 具体名称已隐去
"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 를 대체 하 는 등 이런 방법 으로 한 줄 의 명령 으로 배 치 를 완성 하 는 요 구 를 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.