记录一个jenkinsfile的说明

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 记录一个jenkinsfile的说明

解释一个为k8s环境部署的jenkinsfile

首先见具体的文档

# 这里的部分是配置变量
# pod 的标签名
def label = "slave-${UUID.randomUUID().toString()}"
# 推送到harbor时和之后容器拉取时镜像的tag
def imageTag = "${BUILD_NUMBER}"
# harbor镜像 url
def dockerRegistryUrl = "10.169.136.38:30002"
# harbor镜像 地址
def imageEndpoint = "other-test/test-jenkins-hook"
# 项目完整镜像地址
def image = "${dockerRegistryUrl}/${imageEndpoint}"

podTemplate(label: label, containers: [
  # jenkins 专用的docker容器镜像生成pod ,默认会自动生成,这里应该是因为内网环境加了harbor
  containerTemplate(name: 'jnlp', image: '10.169.136.38:30002/public/jenkins/inbound-agent:4.11-1', args: '${computer.jnlpmac} ${computer.name}'),
  # nodejs环境pod
  containerTemplate(name: 'node', image: '10.169.136.38:30002/public/node:17.1.0', command: 'cat', ttyEnabled: true),
  # docker 容器环境,用来将镜像推harbor  
  containerTemplate(name: 'docker', image: '10.169.136.38:30002/public/docker:20.10.10', command: 'cat', ttyEnabled: true),
  # kbs环境的镜像,用来执行kubectl命令,进行项目部署
  containerTemplate(name: 'kubectl', image: '10.169.136.38:30002/public/cnych/kubectl:latest', command: 'cat', ttyEnabled: true)
]
# 配置jenkins-slave pod挂载的卷,当云环境里面配置pod模板后,挂载卷以云环境配置为准
, volumes: [
  hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]){
  node(label) {
    # 几个git命令 
    def myRepo = checkout scm
    def gitCommit = myRepo.GIT_COMMIT
    def gitBranch = myRepo.GIT_BRANCH
    
    # node 编译打包,因为内网环境有问题,node编译部分去掉了
    stage('代码编译打包') {
      # 从jenkins 的凭据中心 获取nexus账号信息
      withCredentials([string(credentialsId: "Nexus", variable: "NEXUS_AUTH_TOKEN")]){
        container('node') {
          sh """
            echo $PATH
            node -v
            npm -v
            """
        }
      }
    }
    
    # 进行dockers传镜像传到harbor
    stage('构建 Docker 镜像') {
        # 从jenkins 的凭据中心 获取Harbor账号信息,并将账号信息赋给变量
        withCredentials([[$class: 'UsernamePasswordMultiBinding',
            credentialsId: 'Harbor',
            usernameVariable: 'DOCKER_HUB_USER',
            passwordVariable: 'DOCKER_HUB_PASSWORD']]) {
              container('docker') {
                sh """
                   # docker账号登入
                   docker login ${dockerRegistryUrl} -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_PASSWORD}
                   # 进行docker 镜像构建
                   docker build -t ${image}:${imageTag} ./
                   docker push ${image}:${imageTag}
                   """
              }
        }
    }

    stage('Kubectl 部署') {
      container('kubectl') {
        # 从jenkins 的凭据中心 获取k8s-admin账号信息
        withKubeConfig([credentialsId: "k8s-admin", serverUrl: "https://kubernetes.default"]) {
             sh """
                # 将yaml文件中的需要替换的变量进行替换,变成对应的参数
                sed -i "s#<IMAGE>#${image}#" deploy/deployment_test.yml
                sed -i "s#<IMAGE_TAG>#${imageTag}#" deploy/deployment_test.yml
                # 开始构建pod
                kubectl apply -f deploy/deployment_test.yml
                """
        }
      }
    }
  }
}

参考文档

jenkins官方pipeline 文档- https://www.jenkins.io/zh/doc/book/pipeline/
pipeline构建项目实践-编写podTemplate实现和k8s对接- https://blog.csdn.net/weixin_38320674/article/details/108162684
Kubernetes之标签与Pod控制器详解- https://blog.csdn.net/weixin_45186298/article/details/103975384
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
100 0
|
6月前
|
开发工具 git
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
220 0
|
存储 Shell Linux
git 大文件记录清除解决方案
git 大文件记录清除解决方案
2296 0
|
3月前
|
缓存 开发工具 git
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
本文介绍了如何为Git仓库添加`.gitignore`文件来排除不需要跟踪的临时文件,并展示了如何删除已经被提交的临时文件缓存,以清理Git仓库中的不必要文件。
284 0
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
|
存储 前端开发 开发工具
git提交前检查修改文件是否包含调试代码
git提交前检查修改文件是否包含调试代码
80 0
|
开发工具 git
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
|
开发工具 git
Gitlab 从master拉取代码创建新分支 并且再将修改合并到master
Gitlab 从master拉取代码创建新分支 并且再将修改合并到master
742 0
|
开发工具 git
git 排除已经提交的文件目录
如果你已经把一个文件夹提交到了 Git 仓库中,但是后来发现这个文件夹不应该被提交,可以按照以下步骤排除已提交的文件夹: 在文件夹的根目录下创建一个名为 .gitignore 的文件。 编辑 .gitignore 文件,添加需要排除的文件夹的名称,以及其他需要排除的文件或文件类型,每个名称占一行。 执行以下命令,将 .gitignore 文件提交到 Git 仓库中:
539 0
|
缓存 Shell 开发工具
研发中学习git(删除分支/合并提交/回滚/保存当前状态/撤销修改)
研发中学习git(删除分支/合并提交/回滚/保存当前状态/撤销修改)
158 0
|
开发工具 数据安全/隐私保护 git
git命令记录
git命令记录
97 1
git命令记录