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 秒間スリープしようとしましたが、それでも何も起こりません
どんな助けでも感謝します。前もって感謝します