记录一个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月前
|
NoSQL Java Shell
记录几个常用部署项目的命令,以备后用!
记录几个常用部署项目的命令,以备后用!
|
7月前
|
数据可视化
在使用SVN的过程中,通过哪些执行查看某个文件的修改信息
在使用SVN的过程中,通过哪些执行查看某个文件的修改信息
1312 0
|
7月前
|
开发工具 git
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录
274 0
|
6月前
|
缓存 开发工具 git
git过滤不需要的修改提交内容.gitignore的使用
git过滤不需要的修改提交内容.gitignore的使用
76 1
|
7月前
|
Shell 开发工具 git
git 打印最近的五次提交记录
要打印最近的五次提交记录,您可以使用以下命令: ```bash git log -5 ``` 这个命令将显示最近的五次提交记录,包括提交者、提交日期和提交消息。
149 1
|
7月前
|
JavaScript jenkins Java
Jenkinsfile 脚本放置源码仓库
Jenkinsfile 脚本放置源码仓库
134 0
|
开发工具 git
Git的.gitignore文件、标签管理以及给命令起别名
Git的.gitignore文件、标签管理以及给命令起别名
|
开发工具 git
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
【Git】.ignore文件修改后如何更新,删除已提交文件等问题
|
开发工具 git
git 排除已经提交的文件目录
如果你已经把一个文件夹提交到了 Git 仓库中,但是后来发现这个文件夹不应该被提交,可以按照以下步骤排除已提交的文件夹: 在文件夹的根目录下创建一个名为 .gitignore 的文件。 编辑 .gitignore 文件,添加需要排除的文件夹的名称,以及其他需要排除的文件或文件类型,每个名称占一行。 执行以下命令,将 .gitignore 文件提交到 Git 仓库中:
558 0
|
开发工具 数据安全/隐私保护 git
git命令记录
git命令记录
103 1
git命令记录