Jenkins是一款广泛使用的开源自动化CI/CD(即持续集成和持续交付)软件平台,它可以通过建立自动化构建、测试和部署流程帮助开发团队实现高效协作,缩短软件交付周期。Jenkins由Java语言开发,采用MIT协议开源,具有丰富的插件生态系统,Jenkins还支持主从分布式架构,能够通过分布式集群方式扩展其服务规模。Jenkins前身为Hudson项目,在2011年因与Oracle发生分歧而独立。
持续集成(CI):持续集成是指自动触发代码构建、编译、单元测试,并实时反馈结果的能力,Jenkins能与版本控制系统如Git、SVN等无缝集成,通过WebHooks或定时扫描拉取代码。
持续交付(CD):持续交付是指自动化部署到测试、预发布或生产环境,Jenkins丰富的插件能连接到主机、镜像仓库、Kubernetes等各种平台。
任务监控和报告:Jenkins能够实现自动化的报告构建状态,例如将构建结果以邮件形式发送到程序员的邮箱中。
分布式构建:Jenkins支持以主从形式扩展为分布式集群,构建任务可以分配到多个节点上运行,提升大规模项目构建效率。
流水管线(Pipeline):Jenkins支持Pipeline脚本语言,这是一种基于Groovy DSL定义的构建工作流脚本,Pipeline脚本可以实现复杂的构建过程定义,通过脚本我们可以串联整个构建、测试、部署等阶段。
有关这些概念,我们会在后续章节用到时逐一详细介绍。
Jenkins本质上就是一个Java工程,官方提供了Docker镜像和WAR包两种方式供我们部署Jenkins软件,其中WAR包可以使用内置Servlet容器启动也可以部署在Tomcat等应用服务器中运行。注意Jenkins和普通的业务功能不一样,由于实际开发中对Jenkins所在主机总是有很多特殊要求,例如安装各种版本JDK、Maven、NodeJS、DotnetSDK等,Jenkins容器化部署管理起来可能还真未必有WAR包部署到物理机或虚拟机方便,不过这里我们还是出于简单起见直接使用Docker来部署Jenkins,真实环境应根据实际情况选择。
DockerHub主页:https://hub.docker.com/r/jenkinsci/blueocean
Jenkins官方提供了jenkinsci/blueocean
镜像,其中默认集成了Jenkins软件和BlueOcean插件,我们直接使用这个镜像即可。
docker run --name jenkins -u root -d -p 8080:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
上面命令中,-u root
指定以Root用户运行容器避免权限问题,8080
端口用于Jenkins的WebUI,50000
端口是Jenkins的JNLP构建代理通信端口,jenkins-data
是我们挂载的数据卷,这样容器删除后数据也不会丢失,此外我们还把docker.sock
挂载到Jenkins容器,这样Jenkins软件也可以操作我们其它的Docker服务。
注意:命令中还有个--env JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true
,这个环境变量配置禁用了Jenkins插件系统下载时的签名检查,目前Jenkins版本如果不配置它我们使用镜像源下载插件时会报错无法使用,但如果你在非中国大陆地区使用官方的插件源则不必配置这个环境变量。
第一次启动Jenkins时,我们会看到如下的界面,它需要输入一个初始化密码以确定是系统的管理员在操作。这个密码可以在/var/jenkins_home/secrets/initialAdminPassword
文件中找到,或者我们直接查看容器的控制台日志,输出信息中也可以找到。
在控制台上我们可以看到类似下面的日志,输入这个密码即可进行后续操作。
2025-04-04 12:40:09 Jenkins initial setup is required. An admin user has been created and a password generated.
2025-04-04 12:40:09 Please use the following password to proceed to installation:
2025-04-04 12:40:09
2025-04-04 12:40:09 8677acb1fee8493fb2f4c1beda433522
2025-04-04 12:40:09
2025-04-04 12:40:09 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
输入密码后会提示我们是否安装推荐插件,这一步我们直接跳过即可(或者记录下推荐的插件列表后续再安装),我们还没配置镜像源,如果现在安装大概率会卡住很久而且也无法安装成功。最后我们还需要创建管理员账号,创建完成后我们就可以正式使用Jenkins了。
Jenkins很多功能是需要插件来支持的,如果你在国内可能需要配置插件的镜像源,否则下载插件时可能报错。我们在界面上点击Manage Jenkins -> Plugin Manager -> Advanced
,在这里配置Update Site
。例如我们可以配置华为云的镜像源https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
。此时再安装插件速度就比较快了。