记录一个jenkinsfile的说明

简介: 记录一个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搭建和管理企业级网站应用
相关文章
|
7月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
106 0
|
7月前
|
开发工具 git
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
254 0
|
6月前
|
缓存 开发工具 git
git过滤不需要的修改提交内容.gitignore的使用
git过滤不需要的修改提交内容.gitignore的使用
69 1
|
开发工具 git
步骤记录:git上传项目
步骤记录:git上传项目
93 0
|
7月前
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
127 0
|
开发工具 git
Git的.gitignore文件、标签管理以及给命令起别名
Git的.gitignore文件、标签管理以及给命令起别名
|
开发工具 数据安全/隐私保护 git
从一个git仓库内迁移分支代码到另一个git仓库,保存之前仓库的提交记录
有时候拉取开源仓库到自己的仓库,再拉取时又想保留开源之前的提交路径,并且自己的仓库不想展示分支名称为开源仓库名称,想改为master,可以看下面的几种方式
|
开发工具 git
git统计某个时间段内的git新增/删除代码行数
git统计某个时间段内的git新增/删除代码行数
864 0
|
开发工具 git
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
|
开发工具 git 开发者
#PY小贴士# git 的冲突
一般情况下,git 会自动将不同开发者提交的内容进行合并。但如果两个人在同一个版本上提交新内容,且修改了相同位置的代码,git 无法自动判断应该听谁的,于是就产生了冲突(conflict)。(有些同学在家里和公司的电脑上都写代码,然后某次忘记更新后在两台电脑上都改了一遍,也会产生类似的问题。)