Дипломная работа: Автоматизация доставки программного обеспечения при помощи DevOps практик и инструментов в облаке AWS в компании ООО "Команда Лабс"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
111
aws configure set aws_secret_access_key
$AWS_SECRET_ACCESS_KEY
aws configure set default.region $AWS_DEFAULT_REGION
echo 'Start create ecr for FULL_HAPI_APP_NAME: '
$FULL_HAPI_APP_NAME '- result name is FULL_HAPI_REPO_NAME:
'$FULL_HAPI_REPO_NAME
aws ecr describe-repositories --repository-names
$FULL_HAPI_REPO_NAME 2>&1 > /dev/null
status=$?
if [[ ! "${status}" -eq 0 ]]; then
echo 'Start create ecr for' $FULL_HAPI_APP_NAME '- result name
is '$FULL_HAPI_REPO_NAME
aws ecr create-repository --repository-name
$FULL_HAPI_REPO_NAME
aws ecr put-lifecycle-policy --repository-name "hapi-
$ENV/$FULL_HAPI_APP_NAME" --lifecycle-policy-text
"file://%system.teamcity.build.checkoutDir%/env/aws/dev/lifecycle_policy/default_p
olicy.json"
fi
$(aws ecr get-login --no-include-email --region %region%)
cd $PROJECT_LOCATION/$FULL_HAPI_APP_NAME
echo 'Start build and push project' $FULL_HAPI_APP_NAME 'with
version tag' $version
docker build -t hapi-$ENV/$FULL_HAPI_APP_NAME .
docker tag hapi-$ENV/$FULL_HAPI_APP_NAME:latest
$ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:latest
docker tag hapi-$ENV/$FULL_HAPI_APP_NAME:latest
$ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$version
112
docker tag hapi-$ENV/$FULL_HAPI_APP_NAME:latest
$ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$GIT_TAG
#docker push
docker push $ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:latest
docker push $ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$version
docker push $ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$GIT_TAG
#trivy
echo 'Scan trivy start'
trivy --exit-code 1 --severity HIGH --quiet --auto-refresh
$ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$GIT_TAG |& tee -a
$PROJECT_LOCATION/report.txt
trivy --exit-code 1 --severity CRITICAL --quiet --auto-refresh
$ECR_ID.dkr.ecr.%region%.amazonaws.com/hapi-
$ENV/$FULL_HAPI_APP_NAME:$GIT_TAG |& tee -a
$PROJECT_LOCATION/report_critical.txt
# Need to substring the latest part from i.e. producers/hapi-producer
HAPI_APP_NAME=`string="$FULL_HAPI_APP_NAME" && printf
"%s\n" "${string##*/}"`
echo 'Result HAPI_APP_NAME = '$HAPI_APP_NAME
TASK_FAMILY=`echo $ENV$DASH$HAPI_APP_NAME`
list_tasks=`aws ecs list-task-definition-families --family-prefix
$TASK_FAMILY`
echo 'Found list tasks = '"$list_tasks"
if [[ ! "$list_tasks" == *"$TASK_FAMILY"* ]]; then
113
IMGAGE_PLACEHOLDER="<IMAGE_FULL_PATH_WITH_VERSION_PLACE
HOLDER>"
ls -la
%system.teamcity.build.checkoutDir%/$PATH_TO_TASK_DEFENITION
RESUL
TASK_DEFINITION_FILE=$(cat
%system.teamcity.build.checkoutDir%/$PATH_TO_TASK_DEFENITION/$HAPI_
APP_NAME$JSON)
echo "Definition file json is TASK_DEFINITION_FILE: "
$TASK_DEFINITION_FILE
IMAGE_FULL_PATH_WITH_VERSION=$ECR_ID.dkr.ecr.%region%.amazonaws
.com/hapi-$ENV/$FULL_HAPI_APP_NAME:$GIT_TAG
echo 'Image full path will be used
IMAGE_FULL_PATH_WITH_VERSION: '
$IMAGE_FULL_PATH_WITH_VERSION
echo 'Start build task definition family' $TASK_FAMILY 'with
container definition file' $TASK_DEFINITION_FILE
TASK_DEFINITION_RESULT="${TASK_DEFINITION_FILE//$IMGAGE_PLA
CEHOLDER/$IMAGE_FULL_PATH_WITH_VERSION}"
echo 'Resulted json definition after insert image url: '
$TASK_DEFINITION_RESULT
RESULT_TASK_DEFINITION_FILE=$TASK_FAMILY$JSON
touch RESULT_TASK_DEFINITION_FILE
echo "$TASK_DEFINITION_RESULT" >
"$RESULT_TASK_DEFINITION_FILE"
114
export TASK_VERSION=$(aws ecs register-task-definition --family
${TASK_FAMILY} --cli-input-json file://$RESULT_TASK_DEFINITION_FILE --
debug | jq --raw-output '.taskDefinition.revision')
echo "Registered ECS Task Definition: " $TASK_VERSION
if [ -n "$TASK_VERSION" ]; then
echo "Update ECS Cluster: " $CLUSTER
echo "Service: " $HAPI_APP_NAME
echo "Task Definition: " $TASK_FAMILY:$TASK_VERSION
DEPLOYED_SERVICE=$(aws ecs update-service --cluster
$CLUSTER --service $HAPI_APP_NAME --task-definition
$TASK_FAMILY:$TASK_VERSION | jq --raw-output '.service.serviceName')
echo "Deployment of $DEPLOYED_SERVICE complete"
else
echo "exit: No task definition"
exit;
fi
else
echo "Task definition with family $TASK_FAMILY exists. Update
existing service $HAPI_APP_NAME in cluster $CLUSTER"
ecs --version
ecs deploy $CLUSTER $HAPI_APP_NAME -t $GIT_TAG --timeout
-1 --no-deregister
fi
fi
done
Разворачивание сервера интеграции при помощи Docker
hapi-teamcity
* docker run -d --name hapi-teamcity --restart always --log-opt max-
size=10m -v /var/lib/docker/volumes/hapi-
115
teamcity/_data:/data/teamcity_server/datadir -v /var/lib/docker/volumes/hapi-
teamcity-logs/_data:/opt/teamcity/logs -p 8555:8111 jetbrains/teamcity-server
* docker run -d --name hapi-teamcity-agent-1 --restart always --log-opt max-
size=10m --link hapi-teamcity:teamcity -e SERVER_URL=http://teamcity:8111 -e
AGENT_NAME=hapi-teamcity-agent-1 -v /var/lib/docker/volumes/hapi-teamcity-
agent-1/_data:/data/teamcity_agent/conf jetbrains/teamcity-agent
* docker run -d --name hapi-teamcity-agent-2 --restart always --log-opt max-
size=10m --link hapi-teamcity:teamcity --link hapi-kafka:hapi -e
SERVER_URL=http://teamcity:8111 -e AGENT_NAME=hapi-teamcity-agent-2 -v
/var/lib/docker/volumes/hapi-teamcity-agent-2/_data:/data/teamcity_agent/conf
jetbrains/teamcity-agent
Листинг сборки Nginx из исходных кодов
01a-nginx-install_from_source.sh
#!/bin/bash -e
EXT_TAR=.tar.gz
EXT_DB=.mmdb
NGINX_PRE=nginx-
PCRE_PRE=pcre-
ZLIB_PRE=zlib-
OPENSSL_PRE=openssl-
GEOIP1_PRE=GeoLite2-City
GEOIP2_PRE=GeoLite2-Country
HEADERS_MORE_PRE=headers-more-nginx-module-
SRC_FOLDER_PATH=${WORKING_DIR}/${SRC_FOLDER}
DEB_PKG_FOLDER_PATH=${WORKING_DIR}/${DEB_PKG_FOLDER
}
INSTALL_LOG_FOLDER_PATH=${WORKING_DIR}/${LOG_FOLDER
}
Источник: https://baza.diplomsite.ru/previewfile/1758