我使用的是SAM CLI自动生成的hello world jenkinsfile:
steps {
sh 'sam build --template ${SAM_TEMPLATE}'
withAWS(
credentials: env.PIPELINE_USER_CREDENTIAL_ID,
region: env.TESTING_REGION,
role: env.TESTING_PIPELINE_EXECUTION_ROLE,
roleSessionName: 'deploying-feature') {
sh '''
sam deploy --stack-name $(echo ${BRANCH_NAME} | tr -cd '[a-zA-Z0-9-]') \
--capabilities CAPABILITY_IAM \
--region ${TESTING_REGION} \
--s3-bucket ${TESTING_ARTIFACTS_BUCKET} \
--no-fail-on-empty-changeset \
--role-arn ${TESTING_CLOUDFORMATION_EXECUTION_ROLE}
'''
}
}
}
- PIPELINE_USER_CREDENTIAL_ID是一个用户名+密码jenkins凭证,带有我的iam用户访问密钥+密钥。IAM用户具有承担IAM角色的权限。
- TESTING_PIPELINE_EXECUTION_ROLE是一个IAM角色,它将上面的iam用户作为受信任实体,并附加了adminaccess策略。
sam deploy命令失败,并显示:
File with same data already exists at a6dc4a9f480ec00ce6c24c290c1e5099.template, skipping upload
Error: Failed to create changeset for the stack: feature-001, An error occurred (ValidationError) when calling the CreateChangeSet operation: Role arn:aws:iam::xxx:role/myrole is invalid or cannot be assumed
我在想为什么这个角色不能扮演。我的jenkins访问密钥凭证是正确的,我的角色允许用户承担它,并且有管理员访问策略,所以应该能够在cloudformation中做任何事情。
我的Jenkins运行在ec2上,我需要对示例配置文件做些什么吗?或者,当使用withAWS插件时,我的角色的信任策略应该是其他的?
1条答案
按热度按时间x6yk4ghg1#
修复:SAM需要2个IAM角色,一个用于jenkins管道,一个用于cloudformation:
我把这两个设置为同一个IAM角色。修复方法是创建2个独立的IAM角色,或者对role和--role-arn使用相同的env变量。
我认为问题是这个角色试图扮演自己,却被拒绝了。