操作系统信息

虚拟机,Centos7.5

Kubernetes版本信息

将 v1.29.14

容器版本:

containerd v1.7.1

问题:

devops时,Jenifile agent 镜像构建时无法推送给私有仓库,始终以HTTPS推送,无法配置成HTTP。

尝试方法:

方法:

修改每台集群机器的/etc/containerd/config.toml文件,将私有仓库注册

结果导向:

宿主机上,通过ctr依然无法默认http方式推送,流水线agent poman 也不行,但是添加–plain-http参数可以推送

如:

sudo ctr images pull –plain-http 10.15.28.36/roadshow/roadshow-dev:v1.0.0

原因分析:

无法修改通过修改配置使ctr 与 Jenifile agent 默认使用HTTP

✅ 解决方案:使用 –authfile 和 –tls-verify=false 参数绕过全局配置

我们可以使用 Podman 的命令行参数来:

指定不验证 TLS(HTTP)

使用临时认证文件保存登录信息

避免依赖 /etc/containers 配置

🔧 步骤详解

📌 Step 1: 创建临时目录存放 auth 和镜像文件

TMPDIR=$(mktemp -d) cd $TMPDIR

📌 Step 2: 登录私有仓库并跳过 TLS 校验(重点)

使用 –tls-verify=false 来禁用 HTTPS 检查:

cat "$REGISTRY_PASSWORD" | podman login 10.15.28.36 \ --username sport \ --password-stdin \ --tls-verify=false \ --authfile $TMPDIR/auth.json

📌 Step 3: 打标签(Tag)

podman tag ruoyi-admin:latest 10.15.28.36/roadshow/port-xxj:SNAPSHOT-$BUILD_NUMBER

📌 Step 4: 推送镜像并跳过 TLS 校验

podman push 10.15.28.36/roadshow/port-xxj:SNAPSHOT-$BUILD_NUMBER \ --tls-verify=false \ --authfile $TMPDIR/auth.json

📝 完整 Jenkins Pipeline 示例片段

将如下内容放入你的 Jenkinsfile 或 shell 脚本中:

stage('推送镜像') {
    agent none

    environment {
        REGISTRY = '10.15.28.36'
        DOCKERHUB_NAMESPACE = 'roadshow' // 替换为你自己的项目名
        IMAGE_NAME = 'port-xxj'
        TMPDIR = '/tmp/podman-tmp'
    }

    steps {
        container('maven') {
            withCredentials([usernamePassword(
                credentialsId: 'own-harbor',
                usernameVariable: 'DOCKER_USER_VAR',
                passwordVariable: 'DOCKER_PWD_VAR'
            )]) {
                script {
                    sh '''
                        set -eux
                        mkdir -p ${TMPDIR}
                        cd ${TMPDIR}

                        echo "$DOCKER_PWD_VAR" | podman login \
                            --username "$DOCKER_USER_VAR" \
                            --password-stdin \
                            --tls-verify=false \
                            --authfile=${TMPDIR}/auth.json \
                            ${REGISTRY}

                        podman tag ruoyi-admin:latest ${REGISTRY}/${DOCKERHUB_NAMESPACE}/${IMAGE_NAME}:SNAPSHOT-${BUILD_NUMBER}

                        podman push \
                            --tls-verify=false \
                            --authfile=${TMPDIR}/auth.json \
                            ${REGISTRY}/${DOCKERHUB_NAMESPACE}/${IMAGE_NAME}:SNAPSHOT-${BUILD_NUMBER}
                    '''
                }
            }
        }
    }
}

更多推荐