我一直在尝试将Jenkins设置为使用Kubernetes,如教程中所示。我让一切都运行得很好,但我一直在尝试使用Kubernetes Jenkins插件添加一些自定义图像。似乎任何公共镜像都能正常工作,但当我创建一个镜像并将其放入我的私有Container Registry中时,Jenkins从镜像就失败了。
我想知道如何最好地利用Jenkins中Container Registry中的图像。我找到了这个教程(https://cloud.google.com/solutions/jenkins-on-container-engine#customizing_the_docker_image)。当我通过构建jenkins-slave映像并将其推送到我的存储库来尝试这些步骤时,它不起作用。每次它都会抱怨从服务器处于离线状态,并且无法访问。
发布于 2016-12-01 23:23:19
我从来没有尝试过谷歌容器注册表,但据我所知,你可以只使用完整的repo+image名称。类似于: gcr.io/my_project/image:tag
确保您的图片/repo与您的kubernetes和jenkins在google cloud上使用相同的服务帐户!
发布于 2021-05-15 01:13:26
当容器构建代理(以前的术语是slave)在Jenkins中显示为脱机时,这通常意味着如果使用管道,则Jenkins文件中存在错误,或者在拉取代理镜像容器时出现问题。
如果您使用的是Kubernetes插件,您将在Kubernetes pod和该插件的较新版本的构建日志中看到该错误。对于docker插件容器,错误可能不会出现在构建日志中,但会出现在docker日志中。
这通常是从注册表中提取映像的身份验证或访问问题。
如果您正在使用,则Pod YAML或Pod模板必须包含您希望从中提取容器镜像的Container Registry的imagePullSecrets。
Jenkins脚本管道:
node {
podTemplate(cloud: 'kubernetes', containers: [
containerTemplate(
name: 'mine',
image: 'my-image:v1.2',
ttyEnabled: true,
),
],
imagePullSecrets: [ 'my-credentials-id' ]) {
sh 'run command'
}
}Jenkins声明性管道:
pipeline {
agent {
kubernetes {
cloud 'kubernetes'
defaultContainer 'mine'
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
build: my-app
spec:
containers:
- name: mine
image: my-image:v1.2
command:
- cat
tty: true
imagePullSecrets:
- name: my-image-pull-cred
'''
}
}
stages {
stage('Run Build') {
steps {
sh 'mvn -version'
}
}
}
}如果您正在使用,您将需要定义docker代理withRegistry,它允许您为您希望从中提取容器镜像的注册表传递一个Jenkins凭证。
Jenkins脚本管道:
node {
docker.withRegistry('https://my-registry.gcr.io', 'my-credentials-id') {
docker.image('my-image:v1.2').inside {
sh 'run command'
}
}
}Jenkins声明性管道:
pipeline {
agent {
docker {
image 'my-image:v1.0'
registryUrl 'https://my-registry.gcr.io'
registryCredentialsId 'my-credentials-id'
}
}
stages {
stage('Build') {
steps {
sh 'run command'
}
}
}
}https://stackoverflow.com/questions/40861442
复制相似问题