在大数据时代,各种微服务横飞,实在不能忍受手动部署了,本文使用Jenkins + Docker +gitee 持续集成 环境到线上环境
本来打算使用GitHub的 , 但是网速慢+支持国产,选择gitee
首先,我们需要完成的效果是:
1.在开发提交代码到代码版本控制服务器(gitee)后,可以选择各种触发条件,触发构建
2.触发构建后,Jenkins 拉取代码到Jenkins 服务器 打包编译
3.将编译好的镜像推送到镜像服务器/公司私服
4.推送完成后运行镜像文件替换上一个版本镜像
可以看到,我们构建好持续部署环境后仅需要提交代码,就可以摸鱼了
我们这里服务器有限,所以很多东西都放在一台服务器上面进行,为了方便,我们直接使用docker 构建Jenkins 环境
如果实际使用还是推荐直接部署war , 因为docker 中的环境隔离问题,可能导致很多不方便的地方,
提前创建文件夹
mkdir -p /home/docker-data/jenkins
授权,不然会出现 Wrong volume permissions
chown -R 1000 /home/docker-data/jenkins
启动Jenkins
docker run -d --name jenkins -p 8888:8080 -p 50000:50000 --privileged=true -v /home/docker-data/jenkins:/var/jenkins_home docker.io/jenkins/jenkins
查看日志打印 docker logs -f jenkins
可以很明显的看到 successful
, 同时上面有打印初始密码4cad9efec5a745af90587379c5d3275c
找到官网地址 https://www.jenkins.io/download/
选择lts 长期支持版本,复制链接地址
https://get.jenkins.io/war-stable/2.332.2/jenkins.war
再linux 下载 wget 下载或者下载好上传上去
下载jdk1.8以上版本并安装,安装后配置jdk的环境变量。(这里不再累述具体步骤)
在dos命令行运行命令解压war包:java -jar jenkins.war (默认情况下端口是8080,如果要使用其他端口启动,可以通过命令行”java –jar Jenkins.war --httpPort=80”的方式修改)
然后,访问ip:端口 , 如我这里的 http://47.102.129.69:8888/,正常情况下是:
那么,在Linux 端查看密码(就是上面提到的那个)4cad9efec5a745af90587379c5d3275c
,
如果没找到也可以在他这个路径下
/var/jenkins_home/secrets/initialAdminPassword
我们这里映射了外部路径,所以在我们的主机上查看/home/docker-data/jenkins/secrets/initialAdminPassword
文件也可以找到密码
因为第一次使用所以会有点慢,耐心等待
Jenkins 都是基于插件的,所以耦合度低同时适配各种环境的持续集成,这里我们直接安装推荐插件
如果十分熟悉也可以自定义
下载完成之后应该是这样的 , 让你创建一个用户,创建之后记住密码,初始密码无法再次使用了
如果创建完用户密码又忘记了,可以在配置文件关闭权限控制然后,进系统修改
如果不熟悉英文可以在插件管理里面下载 Localization: Chinese (Simplified)
然后重启就ok了,如果是默认的就已经安装好了这个插件,直接重启一下Jenkins就好了
有些插件直接安装了就可以用,有些则需要重启才能生效
如果安装速度慢可以换成国内地址
cd {你的Jenkins工作目录}/updates #进入更新配置位置
sed -i ‘s#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g’ default.json && sed -i ‘s#http://www.google.com#https://www.baidu.com#g’ default.json
然后
危险警告 这里不能随便开放,如果是在公网上面,公网开发那就意味着别人随便练你的docker 加入镜像运行 东西,分分钟变成肉鸡,含泪警告!!!!
然后使用终端登录到服务器,修改/usr/lib/systemd/system/docker.service 为:
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock \
4243为端口号,只要不跟系统冲突,任意端口都行。修改完后执行以下两条命令使配置生效:
systemctl daemon-reload ; service docker restart
ipconfig
防火墙一定要记得开放4243端口。
!
最后在,系统管理->系统配置->拉到最下 cloud -> 新增
同时在,系统管理->系统配置
中 新增 刚才的路径
这个可以让你打包好的程序推到目标服务器上,其实这个我们在本机不使用也可以
##2.3.1 安装工具
在 系统管理->全局工具配置
也可以选择 进入 容器 安装 , 从apache 下载有点慢,所以我们选择这里的自己安装
exec -it jenkins2 /bin/bash
cd /var/jenkins_home/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
安装好了之后 ,设置下maven 的配置文件,把镜像源换下,和本地仓库换下,不然默认是工作空间 每次jar 都要下载特别慢
我这里创建的路径是 /var/jenkins_home/m2/repository
,因为我们之前是把这个路径挂载在外面的,所以可以直接在外面操作,创建文件夹
注意 : 这里要在外面给 仓库授权一下,不然会有错误
chmod -R o+r+w m2
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/repositories/central/url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
一般选址第一个就可以
这边有几种情况构建,一般定时构建,或者脚本构建,或者hook 构建 ,首推hook 构建,可以达到提交代码到仓库根据条件自动构建发布到线上,也可以设定哪些分支,什么条件,更灵活
这里没有gitee hook 需要等gitee 插件下载完才能出现
在这个页面下面点击生成,
你需要把刚才的那个路径配置到你的项目中并且在Jenkins 生成密钥填进去
clean install -X
本来这一步也可以使用 Execute Docker command 执行,但是挂载目录一无法挂载,所以选择直接shell
同时 shell 是在容器里,所以我们要在宿主机上,使用登录ssh 再执行