首页 > 解决方案 > 在 Jenkins 管道内的 shell 脚本中使用 grep 和变量

问题描述

背景:我需要 Jenkins 在管道期间担任 AWS 角色,按照以下步骤操作: https ://ripon-banik.medium.com/aws-assume-role-script-4e7d3b548f20

所有环境变量都已设置,Jenkins 管道:

stage('Get aws role'){
            steps{
                container(name: 'pod'){ 
                sh 'temp_role=$(aws sts assume-role --role-arn arn:aws:iam::${role_account_id}:role/jenkins --role-session-name jenkins-cloudfront --external-id ${external_id})'
                sh (script: 'export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq -r .Credentials.AccessKeyId)')
                sh 'export AWS_SECRET_ACCESS_KEY=$(echo $temp_role | jq -r .Credentials.SecretAccessKey)'
                sh 'export AWS_SESSION_TOKEN=$(echo $temp_role | jq -r .Credentials.SessionToken)'
                sh 'echo ${AWS_ACCESS_KEY_ID}'
                sh 'echo "AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY" '
                sh 'echo "AWS_SESSION_TOKEN: $AWS_SESSION_TOKEN" '
                    }
                } 
            }

如您所见,我尝试了导出变量的不同(以及更多)变体,但运气不佳,看起来 Jenkins 拆分了输出:

[Pipeline] sh
+ jq -r .Credentials.AccessKeyId
+ echo
+ export AWS_ACCESS_KEY_ID=
[Pipeline] sh
+ jq -r .Credentials.SecretAccessKey
+ echo
+ export AWS_SECRET_ACCESS_KEY=
[Pipeline] sh
+ jq -r .Credentials.SessionToken
+ echo
+ export AWS_SESSION_TOKEN=

此时也不能选择调用外部 shell 脚本,有什么建议吗?

标签: jenkinsjenkins-pipeline

解决方案


推荐阅读