从ECR中拉取镜像,用于在Kubernetes k3s上运行的Jenkins容器中

vqlkdk9b  于 2023-06-21  发布在  Jenkins
关注(0)|答案(2)|浏览(112)

我在ECR中有一个图像,我想在我的jenkins管道中用作容器。我的Kubernetes集群是运行本地的k3 s集群。我无法提取图像(我猜),因为我没有正确地传递我的AWS creds(存储在密码为homelab-k3 s-ecr的用户名中)。通过我的搜索,我找不到如何设置AWS信用时,从ECR拉。下面是我的Jenkinfile和错误。有没有关于如何将AWS creds传递到kuberenetes代理配置的指导,以便当我尝试拉取它时可以进行身份验证?

pipeline {
    agent {
        kubernetes {
            yaml """
apiVersion: v1
kind: Pod
metadata:
  name: vapi
  namespace: jenkins
spec:
  containers:
    - name: homelab
      image: <id>.dkr.ecr.us-east-2.amazonaws.com/homelab:1.0.0
      imagePullSecrets:
        - name: homelab-k3s-ecr
"""
        }
    }
    stages {
        stage('Build') {
            steps {
                container('homelab') {
                    sh 'echo "Running build inside the ECR container"'
                }
            }
        }
    }
}
ERROR: Unable to pull Docker image "<id>.dkr.ecr.us-east-2.amazonaws.com/homelab:1.0.0". Check if image tag name is spelled correctly.

我已经尝试使用imagePullSecrets值,就像我在文档https://www.jenkins.io/doc/pipeline/steps/kubernetes/中发现的那样,但我无法让它工作

fnatzsnv

fnatzsnv1#

可以使用环境变量

environment {
    AWS_ACCESS_KEY_ID     = credentials('aws_access_key_id')
    AWS_SECRET_ACCESS_KEY = credentials('aws_secret_access_key')
}

使用环境变量读取官方文档

7uhlpewt

7uhlpewt2#

主要问题是你不能使用raw AWS Access KeySecret Access Key从ECR中提取图像。您需要每隔12小时执行一次登录命令aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com,因为凭据仅在该时间段内有效。
Here是一篇很好的文章,描述了如何创建解决方法并自动更新ECR凭据。

相关问题