简介
Jenkins前身是Hudson(Sun开发),2010年从Hudson分支出来。由于Sun被Oracle收购,并拥有Hudson的商标所有权。2011年1月11日,“Hudson”改名为“Jenkins”,分支出来的Jenkins免费且开源,而Hudson用于商业用途,二者都在继续开发中。
Jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。无需人工干预,减少重复过程以节省时间、费用和工作量。具有易安装、易配置、跨平台、支持安装多种第三方插件等特点。
持续集成(Continuous Integration)
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,团队每个成员每天集成一次或多次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。保证产品快速迭代,同时还能保持高质量
优点:
- 快速发现问题,并作出响应;
- 最大限度地减少风险,降低修复错误代码的成本;
- 将重复性的手工流程自动化,让工程师更加专注于代码;
- 保持频繁部署,快速生成可部署的软件;
- 提高项目的能见度,方便团队成员了解项目的进度和成熟度;
- 增强开发人员对软件产品的信心,帮助建立更好的工程师文化
持续交付 (Continuous Delivery)
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
优点:
- 快速发布。能够应对业务需求,并更快地实现软件价值。
- 编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
- 高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
- 整个交付过程进度可视化,方便团队人员了解项目成熟度;
- 更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
持续集成(Continuous Integration)
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”
实际上,产品在从需求到部署的过程中,会经历若干种不同的环境,例如QA环境、各种自动化测试运行环境、生产环境等。这些环境的搭建、配置、管理,产品在不同环境中的具体部署,状况是比较非常复杂的,从头到尾地全自动持续部署的确困难。那么,如果能做到持续交付,保证代码在模拟环境没问题,也就基本成功完成了
安装
Red Hat/Fedora/CentOS:
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y
Ubuntu/Debian:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
deb https://pkg.jenkins.io/debian-stable binary/
apt-get update
apt-get install jenkins -y
下载jenkins.war包:
Jenkins下载地址:https://jenkins.io/download/
运行:java –jar jenkins.war --httpPort=8080 (默认端口)
Docker Jenkins:
docker run --name jenkins --restart=always \
-p 8080:8080 \
-v /var/www/myjenkins:/var/jenkins_home \
-d jenkinsci/blueocean
针对采用jenkins镜像安装遇到的问题:
[root@localhost ~]# docker logs myjenkins
#错误日志如下
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
检查”/var/jenkins_home”目录权限,当前用户是”jenkins”而且”/var/jenkins_home”目录是属于jenkins用户拥有的
[root@localhost ~]# docker run -ti --rm --entrypoint="/bin/bash" docker.io/jenkinsci/blueocean -c "whoami && id"
jenkins
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
而宿主机本地数据卷/var/www/jenkins目录的拥有者是root用户,解决方案:
1.把当前目录的拥有者赋值给uid 1000,再启动jenkins容器(或者修改宿主机本地数据卷目录权限777)
chown -R 1000 /var/www/myjenkins
2.让容器中以root用户启动
docker run --name jenkins --restart=always -u 0 \
-p 8080:8080 \
-v /var/www/myjenkins:/var/jenkins_home \
-d jenkinsci/blueocean
3.注意开启SELinux情况
1)关闭宿主机的selinux
2)在宿主机上添加 selinux 规则
chcon -Rt svirt_sandbox_file_t /path/to/volume #man docker-run 查看