Docker+Jenkin实现PHP项目自动化部署
前期准备:
- 更新安装Docker环境;
- 拉去运行jenkins镜像;
- jenkins安装配置相关插件;
安装Docker环境:
卸载docker旧版:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-utils包:
yum install -y yum-utils
设置阿里云镜像仓库:
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
启动Docker:
systemctl start docker
运行jenkin镜像:
安装Jenkins:(注意关注端口占用清空 netstat -anp | grep xxx)镜像使用的是 “jenkins/jenkins:lts”
docker run -itd -uroot -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
浏览器访问项目:http://${服务IP}:8080
进入容器获取密码:
# 进入Jenkins
docker exec -it ${容器ID} /bin/bash
#查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
选择安装推荐的插件,然后等待Jenkins自行安装:
全部安装完成,点击继续。
安装配置插件:
在系统管理->插件管理->
PHP项目是非编译型的,所以不需要配置安装maven,是需要安装SSH一个即可。其他就是gitee用到可以装一下,如果像我一样需要多分支构建则还需要添加"Git Parameter Plug-In"。。
全局配置:
在系统管理->全局配置,拉到最低添加SSH Server:
Jenkins主机将密钥发布到web主机:
[root@jenkins ~]# su -s /bin/bash jenkins
bash-4.2$ ssh-keygen
bash-4.2$ ssh-copy-id root@[远程Web服务IP]
这样在添加SSH Server点击测试连接才能跑通~~
新建任务:
点击构建一个自由风格的软件项目
获取我们的仓库地址(gitlab、gitee…) 我的用的是coding
这里需要现在jenkins容器中配置好SSH密钥:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
然后配置到代码管理平台上,记得在容器中试拉去下是否成功~~
由于我需要多分支配置,所以我先配置分支变量:(这里是定义了一个全局变量branch,后续会用到)
最终效果:
配置步骤:
填写拉去仓库地址配置:
最后我通过shell脚本基于rsync工具实现远程同步,这里是因为我基于选择的分支去同步不同路径上的项目
一般简单一句:
rsync -avz --delete * "root@[远程服务IP]:$dest"
这是我需要用到的:
#!/bin/bash
if [ "$branch" == "origin/master" ]; then
dest="/www/wwwroot/new_zhubao"
elif [ "$branch" == "origin/test" ]; then
dest="/www/wwwroot/test_zhubao"
else
dest="/www/wwwroot/dev_zhubao"
fi
rsync -avz --delete * "root@[远程服务IP]:$dest"
这里补充下,如果执行失败可能是没有下载rsync,记得远程服务和本地服务都要安装一下哦,确保万无一失~~
centos:yum install rsync
ubantu: sudo apt update
sudo apt-get install rsync