Skip to content
当前页

jenkins入门

jenkins多用于提交代码后自动构建,并部署代码。它是用java编写的,有很多插件

实战笔记:Jenkins打造强大的前端自动化工作流

快速入门

预期目标:提交代码后自动构建

jenkins安装和启动

  1. 从官网下载war文件,
  2. 运行java -jar jenkins.war不过先要下载配置jdk,然后浏览器打开http://localhost:8080,看到jenkins控制台可能需要等几分钟
  3. 进入浏览器后输入控制台的密码就可以按照步骤新建用户了,进去后可以直接先自动下载默认勾选的一些插件,也可以后续再下载

创建任务并主动构建

  1. 新建一个任务
  2. 指定远程仓库地址
  3. 构建环境勾选Node(需要先去插件中心下载node,然后到工具里面配置node具体版本),如果插件中心刷不出来插件,可以在高级设置里面修改插件获取路径为http://mirror.xmission.com/jenkins/updates/update-center.json
  4. 构建步骤选PowerShell(需要先去插件中心下载然后到工具里面配置),并添加pnpm i --no-frozen-lockfile pnpm build命令
  5. 保存后返回执行build now,可以查看控制台,有可能遇到代码下载不了或者命令执行报错问题

给任务添加webhook

  1. 安装插件Generic Webhook Trigger
  2. 修改构建配置,构建触发器那勾选Generic Webhook Trigger,勾选后会弹出提示,有个地址需要注意http://JENKINS_URL/generic-webhook-trigger/invoke,下面token随便填个字符串,一起放到前面路径那,实测码云没有token就得在路径里面添加用户名密码了,token简单些
  3. 利用ngrok做一个内网穿透,这样码云才能访问本机部署的jenkins
  4. 登录码云,新建仓库,用vue-cli快速初始化一个demo上传,然后进入管理页面 -> webhooks -> 添加地址(就是前面Generic Webhook Trigger里面提升的地址,host用ngrok里面的替换,保证外网能访问)
  5. 提交代码,查看jenkins是否触发了自动构建

自动部署

  1. 安装jenkins插件Publish Over SSH

  2. 在系统管理 - 系统设置里面配置Publish Over SSH,主要是添加远程地址,并测试能否通过ssh连接远程服务器

  3. 项目配置里面添加构建命令

    shell
    cd dist 
    tar -zcvf dist.tar.gz *
  4. 添加构建后操作,选择send build artificial over SSH,填入配置参数,主要就是先打包,然后发送到远程服务器,然后再在远程服务器上执行解压

    shell
    cd /jenkins
    tar -zxvf dist.tar.gz

项目jenkins配置

jenkins配置文件Jenkinsfile,可以用groovy写脚本,也可以用声明式的语法,jenkins自己定义的一些语法规则,下面的例子用的就是声明式语法

jenkins里面可以根据操作自动生成pipeline代码

pipeline {
   agent any // 必须设置,环境变量
   stages {
     stage('拉取代码') {
       steps {
            // git拉取代码
           git credentialsId: 'esgdsgdsgds', url: 'https://gitee.com/test.git'
           echo '拉取代码'
       }
     }
     stage('编译构建') {
       steps {
       echo '编译构建'
            // node运行环境
           nodejs('node21') {
               // windows平台用powershell执行命令,linux环境用sh
               powershell '''pnpm i
               pnpm build
               cd dist
               tar -zcvf dist.tar.gz *'''

           }
       }
     }
     stage('项目部署') {
        steps {
            echo '项目部署'
            // 代码推送到远程服务器
            sshPublisher(publishers: [sshPublisherDesc(configName: 'iubuntu', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /jenkins
            tar -zxvf dist.tar.gz''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'dist', sourceFiles: 'dist/dist.tar.gz')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
        }
     }
   }
}

jenkins节点介绍

Jenkins节点管理之添加节点

jenkins有master和node的概念,就是同时管理多台主机。在master就是当前jenkins启动的主机,node是通过master的面板,指定一个远程主机的目录,自动在远程主机上创建的jenkins服务 可以在控制面板的node节点那进行新增节点,远程主机需要配置java环境变量,因为jenkins依赖java

在docker里面安装jenkins

docker里面安装docker

官方安装步骤

jenkins里面的agent可以配置docker镜像环境,这需要主机具备docker环境,同时jenkins本身又安装在了docker里面。

有3中方式让jenkins能使用docker,jenkins官方demo提供的第二种方式

  1. 把主机的docker环境挂载到jenkins container里面,直接使用主机的docker环境
  2. 在docker里面再来一个docker container(镜像名称:dind),然后把docker container挂载到jenkins container
  3. 在docker里面来一个docker container,直接进入这个docker container,在里面安装jenkins

在k8s里面安装jenkins

官方安装步骤

jenkins - pipline介绍

pipline里面可以使用docker快速生成对应的构建环境,要使用docker,要先下载docker pipline插件

shell
pipeline {
    agent {
        docker { image 'node:20.10.0-alpine3.18' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

在pipline里面使用k8s

kubectl -n jenkins describe secret $(kubectl -n jenkins get secret | grep default | awk '{print $1}')

在jenkins里面添加kubectl命令环境

要执行k8s操作,需要有kubectl-cli工具,而jenkins的Kubernetes CLI插件可以提供kubectl-cli

准备工作:参考:使用kubernetes-plugin插件连接k8s的认证方式

  1. 添加认证配置,用于连接k8s集群,
# 创建serviceaccount
# 把sa与集群绑定
# 获取sa对应的token
# 在jenkins里面添加Credentials,添加前面的token
  1. 获取Kubernetes server endpoint,即集群地址
shell
kubectl cluster-info
# 类似于这种,后面的ip就是地址
# Kubernetes control plane is running at https://127.0.0.1:51802

kubernetes cli使用步骤:

  1. 构建环境 -> 选择Kubernetes CLI
  2. 选中后Credentials选择
  3. 填入Kubernetes server endpoint
  4. 在build steps里面添加powershell,然后就可以直接执行kubectl命令了,默认是在项目根目录下执行