记录一个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
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
22天前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
55 0
|
22天前
|
开发工具 git
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
91 0
|
11月前
|
开发工具 git
步骤记录:git上传项目
步骤记录:git上传项目
71 0
|
22天前
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
81 0
|
7月前
|
存储 前端开发 开发工具
git提交前检查修改文件是否包含调试代码
git提交前检查修改文件是否包含调试代码
58 0
|
10月前
|
存储 开发工具 git
如何从Git存储库中删除不想要的信息(超详细)
如何从Git存储库中删除不想要的信息(超详细)
201 0
|
11月前
|
开发工具 数据安全/隐私保护 git
从一个git仓库内迁移分支代码到另一个git仓库,保存之前仓库的提交记录
有时候拉取开源仓库到自己的仓库,再拉取时又想保留开源之前的提交路径,并且自己的仓库不想展示分支名称为开源仓库名称,想改为master,可以看下面的几种方式
|
12月前
|
开发工具 git
git 排除已经提交的文件目录
如果你已经把一个文件夹提交到了 Git 仓库中,但是后来发现这个文件夹不应该被提交,可以按照以下步骤排除已提交的文件夹: 在文件夹的根目录下创建一个名为 .gitignore 的文件。 编辑 .gitignore 文件,添加需要排除的文件夹的名称,以及其他需要排除的文件或文件类型,每个名称占一行。 执行以下命令,将 .gitignore 文件提交到 Git 仓库中:
468 0
|
jenkins 持续交付 开发工具
问题记录:jenkins扫描不到分支
问题记录:jenkins扫描不到分支
147 0
问题记录:jenkins扫描不到分支
|
开发工具 git
git操作日常记录学习
git操作日常记录学习

热门文章

最新文章