ОШИБКА: Версия приложения не существует локально. Ошибка при загрузке военного артефакта в среду aws beanstalk - PullRequest
0 голосов
/ 04 июля 2018

Я столкнулся с ошибкой при загрузке файла войны в промежуточную среду. Написали сценарий оболочки, который использует eb cli для развертывания артефакта в среде.

config.yml выглядит так:

branch-defaults:
  default:
    environment: testseries-stag-env
deploy:
  artifact: temp/servercp/testseries/testseries-service/target/testseries-service-1.0.0.war
environment-defaults:
  testseries-stag-env:
    branch: null
    repository: null
global:
  application_name: testseries
  default_ec2_keyname: testseries-stag
  default_platform: arn:aws:elasticbeanstalk:us-east-1::platform/Tomcat 8 with Java
    8 running on 64bit Amazon Linux/2.7.5
  default_region: us-east-1
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: null
  sc: null
  workspace_type: Application

build.sh выглядит так:

#!/usr/bin/env bash

# Takes a fresh clone of the dependent repositories and installs them locally.
# Deploys test-series to staging env. See .elasticbeanstalk for more details on this
# Access key Id and secret must be configured in the system to use this shell script
# If you have key and secret with you but system is not configured with it, this script will do it for you. You will
# need to provide the values when requested

# This may contain system dependent bugs. Please report any to devops@adda247.com

timestamp() {
  date +"%d-%h_%H:%M:%S"
}

function installHomeBrew()
{
   /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
}

function installEbCliMac()
{
    brew install awsebcli
}

function installEbCliLinux()
{
    pip install --upgrade --user awsebcli
}

function installPip()
{
    curl -O https://bootstrap.pypa.io/get-pip.py
    if [[ -x $(command -v python) ]]; then
        echo "Python found"
        python get-pip.py --user
    else
        if [[ -x $(command -v python3) ]]; then
            echo "Python3 found"
            python3 get-pip.py --user
        else
#           Only valid for nix instances which support python3. Fails on other systems
            echo "Python not found. Installing..."
            sudo apt-get install python3
            python3 get-pip.py --user
        fi
    fi
    echo "Installing pip with python"
    pip install --upgrade --user pip
}

function installAWSCLI()
{
    if [[ ${OSTYPE} == 'linux-gnu' ]]; then
        pip install awscli --upgrade --user
    elif [[ ${OSTYPE} == 'darwin'* ]]; then
        brew install awscli
    fi
}

function ifEnvVariablesExist()
{
    if [[  -z ${AWS_ACCESS_KEY_ID} || -z ${AWS_SECRET_ACCESS_KEY} ]]; then
        echo false
    else
        echo true
    fi
}

function ifConfigExists()
{
    if [[ -e ${HOME}/.aws/credentials ]]; then
        echo true
    else
        echo false
    fi
}

function deployWar()
{
    version_label=testseries-dev-$(timestamp)
    eb deploy --label=${version_label}
}

function credentialsExist()
{
    env_var=$(ifEnvVariablesExist)
    if [[ ${env_var} == true ]]; then
        echo "reading from environment variables"
    else
        config_file=$(ifConfigExists)
        if [[ ${config_file} == true ]]; then
            echo "reading from config file"
        else
            echo "Neither environment variables nor config file found"
            echo "******   Configuring AWS for you. Please enter aws id and secret when prompted  ******"
            aws_exists=$(command -v aws)
            if [[ -x ${aws_exists} ]]; then
                echo "aws cli is present. Configuring"
            else
                echo "aws cli is absent. Installing"
                installAWSCLI
            fi
            aws configure
            if [[ $? -ne 0 ]]; then
                echo "Unsuccessful configuration. Exiting"
                exit $?
            fi
        fi
    fi
}

function proceedForMac()
{
    eb_cli_exists=$(command -v eb)
    if [[ -x ${eb_cli_exists} ]]; then
        echo "eb cli is present"
    else
        echo "eb cli is absent. Installing with HomeBrew"
        brew_exists=$(command -v brew)
        if [[ -x ${brew_exists} ]]; then
            echo "HomeBrew is present"
        else
            echo "HomeBrew is absent. Installing"
            installHomeBrew
        fi
        installEbCliMac
    fi

    credentialsExist
    deployWar
}

function proceedForLinux()
{
    eb_cli_exists=$(command -v eb)
    if [[ -x ${eb_cli_exists} ]]; then
        echo "eb cli is present"
    else
        echo "eb cli is absent. Installing with pip"
        pip_exists=$(command -v pip)
        if [[ -x ${pip_exists} ]]; then
            echo "pip is present"
        else
            echo "pip is absent. Installing"
            installPip
        fi
        export PATH=~/.local/bin:$PATH
        if [ -f ~/.bash_profile ]; then
            source ~/.bash_profile
        fi
        installEbCliLinux
    fi

    credentialsExist
    deployWar
}

WD=$(pwd)
BUILD_DIR=$(pwd)/temp

if [[ -d ${BUILD_DIR} ]]; then
    rm -rf ${BUILD_DIR}
fi

mkdir ${BUILD_DIR}
chmod 777 ${BUILD_DIR}

cd ${BUILD_DIR}
SSH_KEY_PATH=~/.ssh/id_rsa.pub

if [[ -f ${SSH_KEY_PATH} ]]; then
    git clone git@github.com:metiseduventures/servercp.git
else
    git clone https://github.com/metiseduventures/servercp.git
fi


echo "Building servercp"
cd ${BUILD_DIR}/servercp/testseries
git checkout dev
mvn clean install
if [[ $? -ne 0 ]]; then
    echo "Project build unsuccessful. Please correct testseries project in servercp and run again"
    exit $?
fi

echo "Build Successful. Deploying Artifact"
if [[ ${OSTYPE} == 'linux-gnu' ]]; then
    proceedForLinux
elif [[ ${OSTYPE} == 'darwin'* ]]; then
    proceedForMac
fi

eb deploy команда в функции deployWar, где она не работает

Структура папок

/--* .elasticbeanstalk/config.yml
   * build.sh

Сценарий оболочки build.sh клонирует репозиторий внутри временной папки и создает проект, который успешно завершается

Вывод на консоль после запуска:

Build Successful. Deploying Artifact
eb cli is present
reading from config file
ERROR: Application Version does not exist locally 
(temp/servercp/testseries/testseries-service/target/testseries-service- 
1.0.0.war). Try uploading the Application Version again.

Однако, temp/servercp/testseries/testseries-service/target/testseries-service-1.0.0.war существует хорошо.

Если после этого я немедленно запью eb deploy --version-label="my-label", артефакт будет развернут в порядке. Но когда то же самое выполняется изнутри скрипта, это выдает вышеуказанную ошибку. Я пробовал спать в течение 2 секунд перед командой eb deploy, но все равно ничего

Любая помощь приветствуется. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

Я думаю, что проблема связана с местом, откуда происходит ваш eb deploy (без --label). С cd ${BUILD_DIR}/servercp/testseries вы находитесь где-то глубоко внутри вашего проекта, тогда как temp/.../*.war - это путь относительно корня вашего проекта. Я думаю cd ${WD} как раз перед тем, как eb deploy решит вашу проблему.

0 голосов
/ 04 июля 2018

Что такое ваш build.sh контент? Я думаю, может быть, вы могли бы сделать перерыв sleep 2 перед реальной командой развертывания?

...