Jenkins 03_jenkins_gtilab_shell结合

代码手动上线:
环境:
192.168.189.53----> gitlab
192.168.189.54----->jenkins
192.168.189.59------> WEB Server

测试代码地址:
https://gitee.com/kangjie1209/monitor.git

一、将网上的代码下载到本地gitlab
(gitlab服务器上操作:)
cd /root
git clone https://gitee.com/kangjie1209/monitor.git



mv monitor dzp
登录gitlab web 界面,创建一个项目。







将下载的代码传到gitlab 服务器上:

cd /root/dzp
git init ##初如化

git remote add origin1 git@192.168.189.53:/test/dzp.git 
##添加一个远程仓库,origin1这个是仓库名称

git add . ##添加目录下面的内容添加到暂存区

git commit -m "Initial commit" ##提交到本地仓库
git push -u origin1 master ##推送本地master到远程仓库

gitlab刷新,就能看到我们上传上去的代码了。


二、配置genkins 与 gitlab 结合:

登录到genkins:

配置我们以前创建的项目








出现以下红色报错信息:


你的jenkins 服务器:
没有安装git

jenkins 服务器没有把自己的公钥添加 gitlab上面。

++++++++jenkins 服务器上操作:

yum install git -y
cd /root
ssh-keygen -t rsa ##,选择提示,一直按回车,生成密钥对。

将生成的公钥内容,添加 到gitlab
登录gitlab WEB界面,用管理员账户登录。



+++++++++++
genkins 设置:


















jenkins 从gitlab上面拉取代码成功。
拉取的代码存放的位置: /var/lib/jenkins/workspace/freestyle-job

三、编写网站代码更新的shell 脚本(jenkins 上面操作)

jenkins 和 web服务器(192.168.189.59)做免密钥认证

在Jenkins 服务器(189.54)上面操作:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.189.59
mkdir -p /server/scripts && cd /server/scripts && vim deploy.sh

#!/bin/bash
#gtilab 上面拉取的代码,存放的目录
CODE_DIR=/var/lib/jenkins/workspace/freestyle-job
TIME=`date +%F-%H-%M-%S`

##要部署的WEB Server
IP='192.168.189.59'
# WEB Server nginx 网站目录
WEB_DIR=/usr/share/nginx
cd $CODE_DIR
##打包从gitlab 上面拉取的代码
tar -zcf /tmp/web-${TIME}.tar.gz ./*

#将打包好的代码传到 WEB Server
scp /tmp/web-${TIME}.tar.gz $IP:$WEB_DIR

##在 WEB Server上面的nginx 主目录下面创建网站目录
ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"

## 在WEB Server上面,解压jenkins 上面传过来的网站文件,解压完后,并删除
ssh root@$IP "cd $WEB_DIR && tar xf web-${TIME}.tar.gz -C web-$TIME && rm -rf web-${TIME}.tar.gz"

## 删除 nginx 下面的html ,重新将网站目录软链接到html
ssh root@$IP "cd $WEB_DIR && rm -rf html && ln -s web-${TIME} html"

保存退出。
先测试:
cd /server/scripts
sh deploy.sh



浏览器上打开 WEB Server http://192.168.189.59


+++++++++
四、修改jenkins 配置:添加shell 脚本

登录jenkins :






以后当网站有更新后,我们直接在jenkins 项目下面,点击,Build Now(现在构建)就可以,更新网站了。



五、 模拟网站有内容更新

我们修改一下网站 里面的一个文件内容:
我们直接在gitlab 上面修改,网站,源码内容。
cd /root/dzp


vim index.html


git commit -am "modifle index.html"


git push -u origin1 master



+++++++++
这时,我们在jenkins 项目里面,点击,Build Now(现在构建)

 ,出错了





这是因为,权限以及密钥问题,因为jenkins 在执行脚本时,用的是jenkins 用户,刚才前面做免密钥登录到WEB Server上面时,用的是root 用户。

修改jenkins 的配置文件,将jenkins 运行时的用户改成以root用户运行。

vim /etc/sysconfig/jenkins



保存,退出。重启jenkins

systemctl restart jenkins

重新登录jenkins 删除构建失败的 构建4,重新构建。




重新构建:




查看构建控制台输出信息:






WEB Server 查看:




++++++如果你非要以jenkins 用户来执行shell 脚本

首先我们修改他的登录权限,将/bin/false改为/bin/bash

vim /etc/passwd


切换到jenkins用户,su - jenkins

ssh-keygen -t rsa ##一直按回车
ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@192.168.189.59

切换回root 用户
visudo




最后就能够在jenkins中使用command命令执行了