Диплом: Автоматизация доставки программного обеспечения при помощи 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
}
116
INSTALL_LOG_FILE_PATH=${INSTALL_LOG_FOLDER_PATH}/${LO
G_FILE}
NGINX_SRC_FOLDER_PATH=${SRC_FOLDER_PATH}/${NGINX_PRE
}${NGINX_VER}
PCRE_SRC_FOLDER_PATH=${SRC_FOLDER_PATH}/${PCRE_PRE}${
PCRE_VER}
ZLIB_SRC_FOLDER_PATH=${SRC_FOLDER_PATH}/${ZLIB_PRE}${
ZLIB_VER}
OPENSSL_SRC_FOLDER_PATH=${SRC_FOLDER_PATH}/${OPENSSL
_PRE}${OPENSSL_VER}
HEADERS_MORE_FOLDER_PATH=${SRC_FOLDER_PATH}/headers-
more-nginx-module-0.33
NGINX_SRC_TAR=${NGINX_PRE}${NGINX_VER}${EXT_TAR}
PCRE_SRC_TAR=${PCRE_PRE}${PCRE_VER}${EXT_TAR}
ZLIB_SRC_TAR=${ZLIB_PRE}${ZLIB_VER}${EXT_TAR}
OPENSSL_SRC_TAR=${OPENSSL_PRE}${OPENSSL_VER}${EXT_TA
R}
HEADERS_MORE_TAR=${HEADERS_MORE_PRE}${HEADERS_MOR
E_VER}${EXT_TAR}
GEOIP1_DB_TAR=${GEOIP1_PRE}${EXT_TAR}
GEOIP2_DB_TAR=${GEOIP2_PRE}${EXT_TAR}
GEOIP1_DB_FOLDER=${GEOIP1_PRE}_${GEOIP_VER}
GEOIP2_DB_FOLDER=${GEOIP2_PRE}_${GEOIP_VER}
GEOIP1_DB_FILE=${GEOIP1_PRE}${EXT_DB}
GEOIP2_DB_FILE=${GEOIP2_PRE}${EXT_DB}
117
ALL_SRC_FILES_TAR=${NGINX_PRE}${NGINX_VER}-
${SRC_FOLDER}${EXT_TAR}
DEB_PKG_FILE=nginx_${NGINX_VER}-1_amd64.deb
echo "$(date +"%d-%b-%Y-%H-%M-%S") | Downloading source files..." |&
tee -a ${INSTALL_LOG_FILE_PATH}
# Download and extract the source code for the latest version of NGINX
cd $SRC_FOLDER_PATH
sudo wget http://nginx.org/download/$NGINX_SRC_TAR >>
${INSTALL_LOG_FILE_PATH} 2>&1 && \
sudo tar xzf $NGINX_SRC_TAR >> ${INSTALL_LOG_FILE_PATH}
2>&1
# Download and extract the latest versions of PCRE, zlib and OpenSSL
libraries
sudo wget https://ftp.pcre.org/pub/pcre/${PCRE_SRC_TAR} >>
${INSTALL_LOG_FILE_PATH} 2>&1 && \
sudo tar xzf $PCRE_SRC_TAR >> ${INSTALL_LOG_FILE_PATH} 2>&1
sudo wget http://zlib.net/${ZLIB_SRC_TAR} >>
${INSTALL_LOG_FILE_PATH} 2>&1 && \
sudo tar xzf $ZLIB_SRC_TAR >> ${INSTALL_LOG_FILE_PATH} 2>&1
sudo wget https://www.openssl.org/source/${OPENSSL_SRC_TAR} >>
${INSTALL_LOG_FILE_PATH} 2>&1 && \
sudo tar xzf $OPENSSL_SRC_TAR >> ${INSTALL_LOG_FILE_PATH}
2>&1
118
#sudo https://github.com/openresty/headers-more-nginx-
module/archive/${HEADERS_MORE_VER}${EXT_TAR} >>
${INSTALL_LOG_FILE_PATH} 2>&1 && \
# sudo tar xzf $HEADERS_MORE_TAR >>
${INSTALL_LOG_FILE_PATH} 2>&1
sudo wget https://github.com/openresty/headers-more-nginx-
module/archive/v0.33.tar.gz >> ${INSTALL_LOG_FILE_PATH} 2>&1 && \
sudo tar xzf v0.33.tar.gz >> ${INSTALL_LOG_FILE_PATH} 2>&1
# Download (third party) NGINX modules: cache purge and GeoIP2
# The GeoIP module included with NGINX only works with v1 MaxMind
database files
# V2 database files are far superior, see here for more info:
# https://dev.maxmind.com/geoip/geoip2/whats-new-in-geoip2/
sudo git clone --recursive https://github.com/FRiCKLE/ngx_cache_purge.git
>> ${INSTALL_LOG_FILE_PATH} 2>&1
sudo git clone --recursive https://github.com/leev/ngx_http_geoip2_module.git
>> ${INSTALL_LOG_FILE_PATH} 2>&1
# Remove archive files
sudo rm -rf *.tar.gz >> ${INSTALL_LOG_FILE_PATH} 2>&1
echo "$(date +"%d-%b-%Y-%H-%M-%S") | Building NGINX from source..."
|& tee -a ${INSTALL_LOG_FILE_PATH}
# Configure the build options for NGINX
cd $NGINX_SRC_FOLDER_PATH
sudo ./configure \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
119
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=www-data \
--group=www-data \
--build=Ubuntu \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-openssl=$OPENSSL_SRC_FOLDER_PATH \
--with-openssl-opt=enable-ec_nistp_64_gcc_128 \
--with-openssl-opt=no-nextprotoneg \
--with-openssl-opt=no-weak-ssl-ciphers \
--with-openssl-opt=no-ssl3 \
--with-pcre=$PCRE_SRC_FOLDER_PATH \
--with-pcre-jit \
--with-zlib=$ZLIB_SRC_FOLDER_PATH \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
120
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_secure_link_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-debug \
--add-module=../ngx_http_geoip2_module \
--add-module=../ngx_cache_purge \
--add-module=$HEADERS_MORE_FOLDER_PATH \
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-z,relro -Wl,--as-needed' >>
${INSTALL_LOG_FILE_PATH} 2>&1
# Build nginx with the specified configuration
sudo make >> ${INSTALL_LOG_FILE_PATH} 2>&1
# Create a .deb package (instead of running `sudo make install`)
sudo checkinstall --install=no -y >> ${INSTALL_LOG_FILE_PATH} 2>&1

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)