0

war ファイルをステージング環境にアップロード中にエラーが発生しました。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"と、アーティファクトは問題なくデプロイされます。しかし、スクリプト内から同じことを実行すると、上記のエラーが発生します。eb deploy コマンドの前に 2 秒間スリープしようとしましたが、それでも何も起こりません

どんな助けでも感謝します。前もって感謝します

4

2 に答える 2