Docker 在詹金斯 openshift 中
Docker in jenkins openshift
在 jenkins 管道中使用 docker 时出现问题:"docker: command not found"
如何在 OpenShift Jenkins 上启动 docker?
此外,没有权限在 Jenkins 中打开插件页面。
在 OpenShift 上使用 Jenkins,您不会在 Jenkins 主机上找到任何 Docker 运行时 - 并且可能在从机上也找不到:cri-o 是首选运行时(也是唯一的运行时,从 4.x).
如果你想启动容器,你应该使用任何 OpenShift 或 Kubernetes 插件:创建 Pods。在 OpenShift 中,您不需要在 Jenkins 本身上配置或安装任何东西——除了编写您的管道。只要您的 Jenkins ServiceAccount 对项目具有编辑或管理权限,那么它就能够管理相应命名空间中的容器。
pipeline {
agent {
node { label 'maven' }
}
stages {
stage('clone') {
// clone the repository serving your YAMLs
}
stage('create') {
steps {
script {
openshift.withCluster() {
openshift.withProject() {
try {
timeout(5) {
objectsFromTemplate = openshift.process("-f", "/path/to/clone/directory/deploy.yaml", '-p', "FRONTNAME=${params.buildHash}",
'-p', "LDAP_IMAGE_TAG=${params.buildHash}", '-p', "ROOT_DOMAIN=${params.rootDomain}")
echo "The template will create ${objectsFromTemplate.size()} objects"
for (o in objectsFromTemplate) { o.metadata.labels["${templateSel}"] = "${templateMark}-${params.buildHash}" }
created = openshift.create(objectsFromTemplate)
created.withEach { echo "Created ${it.name()} from template with labels ${it.object().metadata.labels}" }
}
} catch(e) {
// DoSomething
}
}
}
}
}
}
}
}
如果您没有对 Jenkins 管理界面的完全访问权限,请检查该命名空间中的 RoleBindings:也许您不是管理员?
它不会阻止您创建自己的 podTemplates(使用 ConfigMaps)、Credentials(使用 Secrets)或 jobs/jenkinsFiles(使用 BuildConfigs)。虽然您可以为 Jenkins 安装其他插件,但在您的 Jenkins 部署中 adding/changing INSTALL_PLUGINS
环境变量的内容。
另请注意,Jenkins ServiceAccount 令牌可用于以管理员身份对 Jenkins 进行身份验证,围绕 Jenkins OpenShift OAuth 集成工作。
最简单的方法是使用OpenShift提供的jenkins安装
OpenShift 中 jenkins 的文档在这里:https://docs.openshift.com/container-platform/4.8/openshift_images/using_images/images-other-jenkins.html
要构建 docker 图像,建议的解决方案是使用“源到图像”(s2i) and/or 使用"BuildConfig"
管理“docker 构建“
该文档还解释了如何使用与 OCP 集成的 jenkins 管理 jenkins authentication/authorizations(OAuth + 到 OpenShift 的角色绑定)
奖励点:jenkins 配置了所有必需的插件(k8s、OCP...),并且在您升级 OCP 时自动升级
在 jenkins 管道中使用 docker 时出现问题:"docker: command not found"
如何在 OpenShift Jenkins 上启动 docker? 此外,没有权限在 Jenkins 中打开插件页面。
在 OpenShift 上使用 Jenkins,您不会在 Jenkins 主机上找到任何 Docker 运行时 - 并且可能在从机上也找不到:cri-o 是首选运行时(也是唯一的运行时,从 4.x).
如果你想启动容器,你应该使用任何 OpenShift 或 Kubernetes 插件:创建 Pods。在 OpenShift 中,您不需要在 Jenkins 本身上配置或安装任何东西——除了编写您的管道。只要您的 Jenkins ServiceAccount 对项目具有编辑或管理权限,那么它就能够管理相应命名空间中的容器。
pipeline {
agent {
node { label 'maven' }
}
stages {
stage('clone') {
// clone the repository serving your YAMLs
}
stage('create') {
steps {
script {
openshift.withCluster() {
openshift.withProject() {
try {
timeout(5) {
objectsFromTemplate = openshift.process("-f", "/path/to/clone/directory/deploy.yaml", '-p', "FRONTNAME=${params.buildHash}",
'-p', "LDAP_IMAGE_TAG=${params.buildHash}", '-p', "ROOT_DOMAIN=${params.rootDomain}")
echo "The template will create ${objectsFromTemplate.size()} objects"
for (o in objectsFromTemplate) { o.metadata.labels["${templateSel}"] = "${templateMark}-${params.buildHash}" }
created = openshift.create(objectsFromTemplate)
created.withEach { echo "Created ${it.name()} from template with labels ${it.object().metadata.labels}" }
}
} catch(e) {
// DoSomething
}
}
}
}
}
}
}
}
如果您没有对 Jenkins 管理界面的完全访问权限,请检查该命名空间中的 RoleBindings:也许您不是管理员?
它不会阻止您创建自己的 podTemplates(使用 ConfigMaps)、Credentials(使用 Secrets)或 jobs/jenkinsFiles(使用 BuildConfigs)。虽然您可以为 Jenkins 安装其他插件,但在您的 Jenkins 部署中 adding/changing INSTALL_PLUGINS
环境变量的内容。
另请注意,Jenkins ServiceAccount 令牌可用于以管理员身份对 Jenkins 进行身份验证,围绕 Jenkins OpenShift OAuth 集成工作。
最简单的方法是使用OpenShift提供的jenkins安装
OpenShift 中 jenkins 的文档在这里:https://docs.openshift.com/container-platform/4.8/openshift_images/using_images/images-other-jenkins.html
要构建 docker 图像,建议的解决方案是使用“源到图像”(s2i) and/or 使用"BuildConfig"
管理“docker 构建“
该文档还解释了如何使用与 OCP 集成的 jenkins 管理 jenkins authentication/authorizations(OAuth + 到 OpenShift 的角色绑定)
奖励点:jenkins 配置了所有必需的插件(k8s、OCP...),并且在您升级 OCP 时自动升级