#amazon-web-services #jenkins #amazon-s3 #upload #jenkins-pipeline
#amazon-веб-сервисы #дженкинс #amazon-s3 #загрузка #дженкинс-конвейер
Вопрос:
У меня есть конвейер, который зависает при попытке загрузить файл в s3:
def get_temp_credentials() {
credentials_json = sh(returnStdout: true, script: "curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI -ss | python -mjson.tool").trim()
def c = readJSON text: credentials_json
return c
}
def AWS_ACCESS_KEY_ID
def AWS_SECRET_ACCESS_KEY
def AWS_SECRET_ACCESS_TOKEN
pipeline {
agent none
stages {
stage('GetMasterCredentials') {
agent { label 'master' }
steps {
script {
AWS_ACCESS_KEY_ID=get_temp_credentials()['AccessKeyId']
AWS_SECRET_ACCESS_KEY=get_temp_credentials()['SecretAccessKey']
AWS_SECRET_ACCESS_TOKEN=get_temp_credentials()['Token']
echo "Master AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}"
}
}
}
stage('BUILD') {
agent { label 'macOS' }
steps {
echo "Mac AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}"
sh 'mkdir -p js'
sh 'echo "not a artifact file" > js/build.js'
sh 'echo "artifact file" > js/build.min.js'
sh 'mkdir -p css'
sh 'echo "not a artifact file" > css/build.css'
sh 'echo "artifact file" > css/build.min.css'
withEnv([
"AWS_ACCESS_KEY_ID=" "${AWS_ACCESS_KEY_ID}",
"AWS_SECRET_ACCESS_KEY=" "${AWS_SECRET_ACCESS_KEY}",
"AWS_SECRET_ACCESS_TOKEN=" "${AWS_SECRET_ACCESS_TOKEN}",
"AWS_DEFAULT_REGION=us-east-2"]) {
s3Upload bucket:"build-artifacts", path:'Test/js/build.min.js', file: 'js/build.min.js'
}
}
}
}
}
В этом примере можно перемещать учетные данные с узла AWS EC2 на узел on premisse.
Единственное, что он зависает при загрузке, нет сообщения об ошибке обратной связи, просто время ожидания задания.
Комментарии:
1.Где выполняется эта работа? указанный вами IP
169.254.170.2
-адрес — это конечная точка метаданных IAM, которая действительна для экземпляра EC2 (некоторых других ресурсов AWS), и если вы используете его в AWS / EC2, почему бы не использовать роли IAM для аутентификации? Кроме того, ваша работа, похоже, заключается в загрузке откуда угодно на S32. @SathyajithBhat, может быть, я выразился недостаточно ясно, извини. У меня есть главный узел, который находится в AWS, и подчиненный узел, который находится на локальном сервере в центре обработки данных. Я хочу загрузить на S3 с локального сервера, и, согласно документации, s3upload использует учетные данные главного узла, если мы не используем опцию «useNode». Дело в том, что у меня нет никаких отзывов, и задания просто зависают при загрузке файла.
3. Это определенно проблема аутентификации / сети / брандмауэра, и вам необходимо выполнить тестирование изолированного доступа следующим образом. Можете ли вы вручную войти в систему
on-prem slave
? Если да, пожалуйста, войдите на подчиненный хост, запуститеs3 upload
команду и поделитесь выводом. Кроме тогоmacos
,echo "Mac AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}"
правильно ли выведено значение в выводе консоли jenkins?4. Что вы имеете в виду под сетевой ошибкой? Учетные данные, используемые для выполнения загрузки, получены от ведущего устройства, согласно документации плагина, в подчиненном устройстве нет $ {AWS_ACCESS_KEY_ID}, по крайней мере, явно. Что сейчас исследуется, так это то, должен ли подчиненный иметь доступ к ведущему устройству (инициировать какое-либо соединение) для выполнения загрузки. Если это так, то это может быть проблемой, поскольку мастер не разрешает инициированный сетью трафик из центра обработки данных