简介
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。 Jenkins是一个广泛用于持续构建的可视化Web工具,持续构建就是将项目自动化编译、打包、部署。通过规范化来完成,简单,繁琐,浪费时间的重复工作。
工作流程
1、开发人员提交代码到git仓库 2、Jenkins手动/定时构建项目 3、Jenkins拉取git仓库代码-》代码编译-》打包镜像-》推送到镜像仓库 4、Jenkins执行脚本/Dodckerfile在Docker主机上创建容器并发布 5、测试人员浏览项目进行测试
安装
Jenkins安装包来源
https://jenkins.io/zh/doc/ 或者使用本人提供的 https://download.csdn.net/download/weixin_39218464/27377641
安装命令
yum install -y java
yum localinstall -y /root/jenkins/jenkins-2.222.1-1.1.noarch.rpm
启动
systemctl start jenkins
验证
netstat -lnpt
配置域名
在C:\Windows\System32\drivers\etc目录下修改hosts文件
192.168.10.211 jenkins.liuyuanshan.top
获取密码
cat /var/lib/jenkins/secrets/initialAdminPassword
登录
http:
登录白屏问题解决
1、在$JENKINS_HOME/hudson.model.UpdateCenter.xml文件中,默认内容如下/var/lib/jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http:
</site>
</sites>
这个地址在外国的服务器,因为墙的原因,下载初始化界面所需插件不了,就一直处于等待状态
把url改为http://mirror.xmission.com/jenkins/updates/update-center.json就解决了
直接导入扩展
扩展来源: https://download.csdn.net/download/weixin_39218464/27377641
tar -zxvf jenkins_plugins.tar.gz
rm -rf /var/lib/jenkins/plugins/*
mv plugins/ /var/lib/jenkins/
systemctl stop jenkins
ls /var/lib/jenkins/plugins/
chown -R jenkins.jenkins /var/lib/jenkins
systemctl start jenkins
ps aux | grep jenkins
tail -f /var/log/jenkins/jenkins.log
隐藏界面上面的警告
创建项目
jenkins去集成我们的gitlab或者gitee
jenkins为何要集成gitlab
因为我们需要托管Jenkins将gitlab上项目获取到本地,为后续网站的代码发布工作做准备。
jenkins是如何集成gitlab的
由于Jenkins只是一个调度平台,所有需要安装与gitlab相关的插件既可以完成集成。
jenkins与gitlab的集成步骤
1.开发提交代码到Gitlab上 2.jenkins安装gitlab对应的插件 3.jenkins创建freestyle项目,然后配置gitlab仓库项目对应的地址
jenkins安装gitlab对应的插件
上文直接导入的扩展包以配置好,这里不再配置
jenkins创建freestyle项目
执行 ssh-keygen 把公钥放入到gitlab中
真实目录在
/var/lib/jenkins/workspace/
集群部署
搭建nginx集群
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http:
wget -O /etc/yum.repos.d/CentOS-Base.repo http:
yum makecache
yum install epel-release -y
yum install nginx -y
find / -name 'nginx.conf'
systemctl restart nginx
收到把jenkins的代码拷贝到nginx里面
cd /var/lib/jenkins/workspace/yzm
scp -r ./* root@192.168.10.216:/usr/share/nginx/html
jenkins自动部署到我们集群上面
写一个shell脚本 1)进入项目目录,将内容进行打包 2)将内容通过scp拷贝分发到web集群组中
vi html_deploy.sh
chmod 777 deploy.sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_serer="192.168.10.216 192.168.10.217"
get_code(){
cd ${WORKSPACE} && \
tar czf /opt/web-${DATE}.tar.gz ./../*
}
scp_web_server(){
for host in ${web_serer}
do
scp /opt/web-${DATE}.tar.gz root@${host}:/opt
ssh root@${host} "mkdir -p /usr/share/nginx/html_back/web-${DATE} && \
tar -zxf /opt/web-${DATE}.tar.gz -C /usr/share/nginx/html_back/web-${DATE} && \
rm -rf /usr/share/nginx/html && \
ln -s /usr/share/nginx/html_back/web-${DATE}/yzm /usr/share/nginx/html"
done
}
deploy(){
get_code
scp_web_server
}
deploy
为nginx下的服务器生成密码:ssh-keygen
将Jenkins服务下的pub公钥传递到nginx服务下上,进行免密登录
cd /root/.ssh
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.216
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.217
修改用户权限
systemctl restart jenkins
jenkins支持gitlab的tab
思路
1.开发如果需要发布新版本,必须将当前的版本打上一个标签tag。 2.jenkis需要让其脚本支持传递,比如用户传递v1.1 拉取v1.1标签
实战jenkins部署tag版本
安装git 参数插件,引入的扩展包有,这里只是说明,没有的自行加入
修改参数配置
修改tag的脚本: html_deploy_rollback.sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_serer="192.168.10.216 192.168.10.217"
Name=${DATE}-${git_version}
get_code(){
cd ${WORKSPACE} && \
tar czf /opt/web-${Name}.tar.gz ./../*
}
scp_web_server(){
for host in ${web_serer}
do
scp /opt/web-${Name}.tar.gz root@${host}:/opt
ssh root@${host} "mkdir -p /usr/share/nginx/html_back/web-${Name} && \
tar -zxf /opt/web-${Name}.tar.gz -C /usr/share/nginx/html_back/web-${Name} && \
rm -rf /usr/share/nginx/html && \
ln -s /usr/share/nginx/html_back/web-${Name}/yzm /usr/share/nginx/html"
done
}
deploy(){
get_code
scp_web_server
}
deploy
tag 演示
1、将本地修改好的代码提交到远程仓库 2、在本地打标签后推送到远程上
git tag -a "v1.1" -m 'v1.1版本'
git push origin v1.1
git add .
git commit -m "v1.2"
git push
git tag -a "v1.2" -m "1.2"
git push origin v1.2
部署和回滚
修改脚本: html_deploy_rollback.sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_serer="192.168.10.216 192.168.10.217"
Name=${DATE}-${git_version}
get_code(){
cd ${WORKSPACE} && \
tar czf /opt/web-${Name}.tar.gz ./../*
}
scp_web_server(){
for host in ${web_serer}
do
scp /opt/web-${Name}.tar.gz root@${host}:/opt
ssh root@${host} "mkdir -p /usr/share/nginx/html_back/web-${Name} && \
tar -zxf /opt/web-${Name}.tar.gz -C /usr/share/nginx/html_back/web-${Name} && \
rm -rf /usr/share/nginx/html && \
ln -s /usr/share/nginx/html_back/web-${Name}/yzm /usr/share/nginx/html"
done
}
deploy(){
get_code
scp_web_server
}
back(){
back_file=$(ssh root@192.168.10.216 "find /usr/share/nginx/html_back/ -maxdepth 1 -type d -name "web-*-${git_version}"")
for host in $web_serer
do
ssh root@${host} "rm -rf /usr/share/nginx/html && \
ln -s ${back_file}/yzm /usr/share/nginx/html"
done
}
if [ $deploy_env == "deploy" ];then
deploy
elif [ $deploy_env == "rollback" ];then
back
fi
修改参数配置
演示
|