私はジェンキンスについては、以下のようAWS_ ENV変数を設定しています
sudo apt-get update -y
sudo apt-get install -y python3 python-pip python-devel
sudo pip install awscli
S3_LOGIN=$(aws sts assume-role --role-arn rolename --role-session-name s3_session)
export AWS_CREDENTIAL_PROFILES_FILE=~/.aws/credentials
export AWS_ACCESS_KEY_ID=$(echo ${S3_LOGIN}| jq --raw-output '.Credentials|"\(.AccessKeyId)"')
export AWS_SECRET_ACCESS_KEY=$(echo ${S3_LOGIN} | jq --raw-output '.Credentials|"\(.SecretAccessKey)"')
export AWS_SESSION_TOKEN=$(echo ${S3_LOGIN} | jq --raw-output '.Credentials|"\(.SessionToken)"')
aws configure set default.region us-east-2
aws configure set AWS_ACCESS_KEY_ID $AWS_ACCESS_KEY_ID
aws configure set AWS_SECRET_ACCESS_KEY $AWS_SECRET_ACCESS_KEY
私は、コードからそれらを取得しようとすると、しかし、SDKは、既に設定されたenv変数を読み取ることができません
AWSCredentials evc = new EnvironmentVariableCredentialsProvider().getCredentials();
AmazonS3Client amazonS3 = new AmazonS3Client(evc);
amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));
com.amazonaws.AmazonClientException:AWS環境変数から資格証明書(AWS_ACCESS_KEY_ID(またはAWS_ACCESS_KEY)とAWS_SECRET_KEY(またはAWS_SECRET_ACCESS_KEY))を読み込むことができません
AWS SDKでEnvironmentVariableCredentialsProviderは、以下になります
public AWSCredentials getCredentials() {
String accessKey = System.getenv(ACCESS_KEY_ENV_VAR);
if (accessKey == null) {
accessKey = System.getenv(ALTERNATE_ACCESS_KEY_ENV_VAR);
}
String secretKey = System.getenv(SECRET_KEY_ENV_VAR);
if (secretKey == null) {
secretKey = System.getenv(ALTERNATE_SECRET_KEY_ENV_VAR);
}
accessKey = StringUtils.trim(accessKey);
secretKey = StringUtils.trim(secretKey);
String sessionToken =
StringUtils.trim(System.getenv(AWS_SESSION_TOKEN_ENV_VAR));
if (StringUtils.isNullOrEmpty(accessKey)
|| StringUtils.isNullOrEmpty(secretKey)) {
throw new AmazonClientException(
"Unable to load AWS credentials from environment variables " +
"(" + ACCESS_KEY_ENV_VAR + " (or " + ALTERNATE_ACCESS_KEY_ENV_VAR + ") and " +
SECRET_KEY_ENV_VAR + " (or " + ALTERNATE_SECRET_KEY_ENV_VAR + "))");
}
return sessionToken == null ?
new BasicAWSCredentials(accessKey, secretKey)
:
new BasicSessionCredentials(accessKey, secretKey, sessionToken);
}
編集:私はまた、アプローチの下にしてみてください、
ProfileCredentialsProvider evc = new ProfileCredentialsProvider();
AmazonS3Client amazonS3 = new AmazonS3Client(evc);
amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));
しかし、たとえ私は、資格情報ファイルは〜/ .aws /資格情報であるので、私はまだ下の取得スクリプトでAWS_CREDENTIAL_PROFILES_FILEを設定しました
指定されたパスで見つからなかっクレデンシャルプロファイルファイル:/root/.aws/credentials
AwsProfileFileLocationProviderコードは、下記の言うにもかかわらず、それは/root/.aws/credentialsを見てみてくださいなぜ、私はわかりません
我々はまだからロードの資格情報をサポートしているかどうかをチェック環境変数のオーバーライド*最初に、その後のチェックデフォルトの場所(〜/ .aws /資格情報)、そして最後にバック*レガシー設定ファイルにフォール(〜/ .aws /設定)
私はあなたがセット資格と資格消費の間に別のビルド手順を使用してジェンキンスジョブを設定していると仮定しています。
ジェンキンスは、ビルドステップの間に環境変数を共有しません。
あなたはジェンキンスジョブの古いスタイルを使用している場合は、次のようにいくつかのプラグインを使用する必要がありますenvinject
、またはステップの間で変数を共有するファイルを使用します。以下のような(単なる例として)。
ステップ1
echo "export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" > credential
echo "export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" >> credential
echo "export AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}" >> credential
ステップ2
source credential && ./your_command_here
あなたはジェンキンスパイプラインを訴えている場合しかし、あなたは使用することができますenv
。以下のような(単なる例として)。
pipeline {
parameters {
string(name: 'AWS_ACCESS_KEY_ID', defaultValue: '')
}
stage("set credential") {
steps {
tmp_AWS_ACCESS_KEY_ID = sh (script: 'your shell script here', returnStdout: true).trim()
env.AWS_ACCESS_KEY_ID = tmp_AWS_ACCESS_KEY_ID
}
}
stage("consume credential") {
steps {
echo "${env.AWS_ACCESS_KEY_ID}"
}
}
}