jenkins入门
jenkins多用于提交代码后自动构建,并部署代码。它是用java编写的,有很多插件
快速入门
预期目标:提交代码后自动构建
jenkins安装和启动
- 从官网下载war文件,
- 运行java -jar jenkins.war不过先要下载配置jdk,然后浏览器打开http://localhost:8080,看到jenkins控制台可能需要等几分钟
- 进入浏览器后输入控制台的密码就可以按照步骤新建用户了,进去后可以直接先自动下载默认勾选的一些插件,也可以后续再下载
创建任务并主动构建
- 新建一个任务
- 指定远程仓库地址
- 构建环境勾选Node(需要先去插件中心下载node,然后到工具里面配置node具体版本),如果插件中心刷不出来插件,可以在高级设置里面修改插件获取路径为http://mirror.xmission.com/jenkins/updates/update-center.json
- 构建步骤选PowerShell(需要先去插件中心下载然后到工具里面配置),并添加pnpm i --no-frozen-lockfile pnpm build命令
- 保存后返回执行build now,可以查看控制台,有可能遇到代码下载不了或者命令执行报错问题
给任务添加webhook
- 安装插件Generic Webhook Trigger
- 修改构建配置,构建触发器那勾选Generic Webhook Trigger,勾选后会弹出提示,有个地址需要注意http://JENKINS_URL/generic-webhook-trigger/invoke,下面token随便填个字符串,一起放到前面路径那,实测码云没有token就得在路径里面添加用户名密码了,token简单些
- 利用ngrok做一个内网穿透,这样码云才能访问本机部署的jenkins
- 登录码云,新建仓库,用vue-cli快速初始化一个demo上传,然后进入管理页面 -> webhooks -> 添加地址(就是前面Generic Webhook Trigger里面提升的地址,host用ngrok里面的替换,保证外网能访问)
- 提交代码,查看jenkins是否触发了自动构建
自动部署
安装jenkins插件Publish Over SSH
在系统管理 - 系统设置里面配置Publish Over SSH,主要是添加远程地址,并测试能否通过ssh连接远程服务器
项目配置里面添加构建命令
shellcd dist tar -zcvf dist.tar.gz *
添加构建后操作,选择send build artificial over SSH,填入配置参数,主要就是先打包,然后发送到远程服务器,然后再在远程服务器上执行解压
shellcd /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有master和node的概念,就是同时管理多台主机。在master就是当前jenkins启动的主机,node是通过master的面板,指定一个远程主机的目录,自动在远程主机上创建的jenkins服务 可以在控制面板的node节点那进行新增节点,远程主机需要配置java环境变量,因为jenkins依赖java
在docker里面安装jenkins
jenkins里面的agent可以配置docker镜像环境,这需要主机具备docker环境,同时jenkins本身又安装在了docker里面。
有3中方式让jenkins能使用docker,jenkins官方demo提供的第二种方式
- 把主机的docker环境挂载到jenkins container里面,直接使用主机的docker环境
- 在docker里面再来一个docker container(镜像名称:dind),然后把docker container挂载到jenkins container
- 在docker里面来一个docker container,直接进入这个docker container,在里面安装jenkins
在k8s里面安装jenkins
jenkins - pipline介绍
pipline里面可以使用docker快速生成对应的构建环境,要使用docker,要先下载docker pipline插件
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的认证方式
- 添加认证配置,用于连接k8s集群,
# 创建serviceaccount
# 把sa与集群绑定
# 获取sa对应的token
# 在jenkins里面添加Credentials,添加前面的token
- 获取Kubernetes server endpoint,即集群地址
kubectl cluster-info
# 类似于这种,后面的ip就是地址
# Kubernetes control plane is running at https://127.0.0.1:51802
kubernetes cli使用步骤:
- 构建环境 -> 选择Kubernetes CLI
- 选中后Credentials选择
- 填入Kubernetes server endpoint
- 在build steps里面添加powershell,然后就可以直接执行kubectl命令了,默认是在项目根目录下执行