背景:为了改变目前手工发布项目的流程烦锁,耗时,容易出错,浪费人力物力财力,低效的状况,搭建基于docker容器化的git+jenkins+maven持续集成自动化部署平台,实现从代码提交到生产部署的自动化解决方案,把整个开发生产过程流水线自动化,为公司节省人力物力财力,为开发人员省下更多的时间去优化业务功能等。
能够通过自动化构建、测试和发布流程,通过运行一整套,一致的质量检查提高软件更新的速度和质量。从代码提交到应用部署的自动化完整流程,确保只有通过自动测试的代码才能交付和部署,高效替代业内部署复杂、迭代缓慢的传统方式。
一、安装docker
yum -y install docker
启动docker 后台服务:
service docker start
查看docker版本等详细信息:
二、docker安装gitlab
docker pull gitlab/gitlab-ce:latest
创建并启动gitlab容器:首次启动可能比较慢,需要等待一分钟左右的时间。
docker run --detach --hostname X.X.X.X --publish 8099:80 --publish 2222:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab:z --volume /srv/gitlab/logs:/var/log/gitlab:z --volume /srv/gitlab/data:/var/opt/gitlab:z 453d64ae84c7
启动成功后,打开hostname指定的地址+端口: http://X.X.X.X:8099, 即可看到gitlab管理后台, 账号:root, 密码自己设置,登录后:即可添加分组添加用户及创建项目等操作
创建组名xiejunbo, 创建项目名web, 创建用户名xiejunbo,并把用户xiejunbo加入组。
添加用户本机和jenkins所在服务器的SSH-KEY:
WINDOWS 10:
CentOS7:
在user-->settings-->SSH Keys添加:
初始化maven项目web,并推送上gitlab:
三、docker安装jenkins
拉取镜像
docker pull jenkins/jenkins
创建jenkins容器:指定jenkins目录,8080端口映射,maven目录和java目录
docker run -d --name jenkins -p 8088:8080 -p 50000:50000 -v /usr/local/jenkins_home:/var/jenkins -v /usr/share/maven:/usr/local/maven -v /usr/jdk1.8.0_144:/usr/local/jdk 861760a10fdb
启动容器:
打开http://X.X.X.X:8088, 首次打开:
进入jenkins容器拿到对应password后进入下一步
docker exec -it 9b5 /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
选择默认或自定义模式安装对应插件,然后进入jenkins容器获取密码, 然后安装对应插件(选上JUnit Plugin,SSH plugin,分别用于自动化单元测试和执行远程服务器shell脚本, 还有个Maven Integration plugin, 用于Maven集成,否则新建的时候没有Maven Project):
然后设置用户名和密码,如下:
四、配置jenkins
系统管理-->系统设置,底部,配置邮件通知:
设置管理员邮件:
设置smtp邮件代理:
测试收件:
接下来配置maven_home, maven配置文件地址,java_home及git:
创建一个maven风格的web项目:
填写基本项:
jenkins配置推送触发事件:
在gitlab后台配置事件接口及token:
测试提交代码到gitlab,触发事件推送,jenkins开始执行构建任务。
配置jenkins服务器和部署服务器ssh-key证书,实现从jenkins服务器到部署服务器免密码登录:
遇到的坑:
1. jenkins所在服务器的key验证失败
解决方法:jenkins所在服务器删除掉server, 重新设置server即可。
2.从一个非tty环境执行脚本;Jenkins不能正常从你的脚本中退出
解决方法:jenkins脚本配置选项,选中
Exec in pty |
配置servers:
部署脚本:
cd demo-service/bin
echo hellooooooooooooooooooooooooooooooooooooooo
cd /root/demo-service/bin
nohup ./execute.sh restart
echo ================= end ====================
五、提交代码测试结果
过程:(开发人员只需完成第1步,其余步骤自动完成)
1. 修改代码,提交到gitlab。
2. gitlab触发push事件到jenkins。
3. jenkins收到push事件后,开始从gitlab下更新最新代码。
4. jenkins用maven编译构建打包项目。
5. 编译打包通过后调用部署脚本进行自动部署。
自动部署成功