好家伙,今天跟大家聊聊我这几天折腾的Jenkins,之前一直听说Jenkins这玩意儿挺牛逼,能搞持续集成,自动部署啥的,但一直没真正上手。最近项目上需要,硬着头皮开始搞,现在总算跑起来,也算是趟过一些坑,给大家分享分享。
第一步:先把Jenkins跑起来
我选的是Docker方式,简单粗暴。直接一条命令:
docker run -d --name jenkins_lts -p 10080:8080 -v /docker/jenkins/jenkins_home:/var/jenkins_home -v /var/run/*:/var/run/*
解释一下:
-d
:后台运行--name jenkins_lts
:容器名字叫jenkins_lts-p 10080:8080
:把宿主机的10080端口映射到容器的8080端口,这样就能通过宿主机的10080端口访问Jenkins。-v /docker/jenkins/jenkins_home:/var/jenkins_home
:把容器里的/var/jenkins_home目录挂载到宿主机的/docker/jenkins/jenkins_home目录,这样Jenkins的数据就持久化,以后升级或者重启容器,数据都不会丢。-v /var/run/*:/var/run/*
:这个很重要,允许 Jenkins 访问 Docker socket,这样 Jenkins 就可以在容器里面执行 Docker 命令,比如构建镜像、部署容器等等。
跑起来之后,访问http://你的服务器IP:10080
,就能看到Jenkins的界面。第一次访问会让你输入管理员密码,密码在/var/jenkins_home/secrets/initialAdminPassword文件里,进去看一下就知道。
第二步:装插件
Jenkins的强大之处就在于它丰富的插件,可以扩展各种功能。我装几个常用的:
- Git plugin:用来拉取Git代码的。
- Docker plugin:用来构建Docker镜像,部署容器的。
- Publish Over SSH:用来通过SSH连接到远程服务器,执行命令的。
- Maven Integration:如果是java项目,构建用的。
- Pipeline:定义流程用的,非常重要。
插件安装很简单,在Jenkins的界面里,找到“系统管理” -> “插件管理”,搜索插件名字,然后安装就行。装完记得重启Jenkins。
第三步:配置SSH
因为我的项目需要部署到远程服务器,所以需要配置SSH。在Jenkins的界面里,找到“系统管理” -> “系统配置”,找到“Publish Over SSH”这一项,添加SSH服务器,填上服务器的IP地址、用户名、密码或者密钥等等。
第四步:写个Pipeline
Pipeline是Jenkins的核心,可以把构建、测试、部署等一系列流程串起来。我写一个简单的Pipeline,用来构建Docker镜像,然后部署到远程服务器:
agent any stages { stage('拉取代码') { steps { git url: '你的Git仓库地址', branch: 'master' stage('构建镜像') { steps { sh 'docker build -t 你的镜像名字 .' stage('推送镜像') { steps { sh 'docker push 你的镜像名字' stage('部署') { steps { sshPublisher(publishers: [sshPublisherDesc(configName: '你的SSH服务器名字', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'docker stop 你的容器名字 && docker rm 你的容器名字 && docker run -d -p 你的端口映射:你的容器端口 -e 环境变量 你的镜像名字', execTimeout: 120, flatten: false, makeEmptyDir: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])pipeline {
简单解释一下:
agent any
:表示这个Pipeline可以在任何Jenkins节点上运行。stages
:定义Pipeline的各个阶段。stage('拉取代码')
:拉取Git代码。stage('构建镜像')
:构建Docker镜像。stage('推送镜像')
:推送镜像到镜像仓库。stage('部署')
:通过SSH连接到远程服务器,执行Docker命令,停止旧的容器,删除旧的容器,然后启动新的容器。
第五步:跑起来
在Jenkins的界面里,新建一个Pipeline项目,把上面的Pipeline代码复制进去,然后点击“立即构建”,就能看到Jenkins开始跑Pipeline。如果一切顺利,就能看到Docker镜像被构建出来,然后部署到远程服务器上。
Jenkins这玩意儿确实挺好用,但是配置起来也挺麻烦的。我这只是一个简单的例子,实际项目中肯定要复杂得多。不过只要掌握基本原理,多踩踩坑,就能把它玩转。
希望我的分享对大家有所帮助!
还没有评论,来说两句吧...