2020-07-27
jenkins(Linux)自动部署vue项目至IIS(Windows)
前提:jenkins部署完成(基于Linux)
gitlab部署完成(基于Linux)(上传可用vue项目,例子:add-name)
IIS 部署完成(基于Windows)
以上平台的部署过程已有文档记录,或自行百度
思路
Linux系统下的主机之间通过ssh可远程登录并执行命令,因此Linux系统的主机与Windows系统的主机应该也能通过ssh进行远程执行命令,前提是两主机的 ip是可以通信的。
过程
1.Windows安装winSSHD工具
Windows本身是不支持ssh,需下载工具并进行配置方能使用ssh功能
安装过程见文档:Windows安装winsshd及配置 https://www.jianshu.com/p/a30e71a77279
测试是否能从jenkins服务器 ssh 和scp 到IIS服务器
(jenkisn)
# ssh administrator@172.10.0.108 -p2200 "ls" #第一次连接输入yes, administrator的密码
# scp -P2200 -r kk administrator@172.10.0.108:/d:/Web/ #把jenkins当前目录下的kk文件夹复制到iis的D盘下的Web目录中
2.配置jenkins和gitlab之间秘钥通信
(使jenkins能自动从gitlab上拉取最新的代码)
详细过程见文档:Jenkins自动部署vue项目至Nginx服务器
3.jenkins服务器编写执行脚本
脚本均写在jenkins服务器上
vim /root/.jenkins/workspace/add-name/cpiis.sh
#!/usr/bin/expect
#author perin_qin
#作用:使用expect交互功能(在终端自动输入密码),将jenkins本机打包好的dist目录拷贝到IIs的网站根目录下
set timeout 20
spawn scp -P2200 -r dist administrator@172.10.0.108:/d:/Web/
expect "password:"
send "k*****\r"
expect eof
(expect eof:表示交互结束,退回到原用户jenkins的终端)
chmod a+x /root/.jenkins/workspace/add-name/cpiis.sh #给脚本可执行权限
/usr/bin/expect /root/.jenkins/workspace/add-name/cpiis.sh #执行脚本的方式
vim /root/.jenkins/workspace/add-name/iisrestart.sh
#!/usr/bin/expect
#author perin_qin
#作用:远程控制IIS服务重启
set timeout 20
spawn ssh administrator@172.10.0.108 -p2200 "iisreset /restart"
expect "password:"
send "k*****\r"
expect eof
chmod a+x /root/.jenkins/workspace/add-name/iisrestart.sh
/usr/bin/expect /root/.jenkins/workspace/add-name/iisrestart.sh
4.配置jenkins自动构建
Jenkins---新建项目---项目名称:win-add-name,自由风格---项目配置:(源码管理:Git,克隆地址粘贴gitlab上的,账户选定义好的>>构建环境:Provide Node & npm bin。。。>>构建:执行shell,内容如下>>应用>>保存)---立即构建
执行shell
#cd /root/.jenkins/workspace/add-name/
node -v
npm -v
npm install
rm -rf ./dist/*
npm run build
#拷贝新打包好的目录dist到IIS的项目目录下(默认覆盖原有)
/usr/bin/expect /root/.jenkins/workspace/add-name/cpiis.sh
#重启IIS服务
/usr/bin/expect /root/.jenkins/workspace/add-name/iisrestart.sh
5.查看项目是否部署成功
IIS的项目目录(d:\Web\)下查看是否有dist目录,目录下是否有内容
浏览器:http://172.10.0.108:8089/ 查看网页是否显示项目内容
构建过程中出现的问题
问题:构建过程显示成功,但是执行shell中的脚本没有生效,比如没有将dist拷贝到IIS目录下,IIS远程重启失败等
原因:
1.执行的脚本的用户(jenkins)和脚本的属主(root)不一致
2.脚本的结尾用interact,没有退出远程终端
解决:
1.统一用户身份执行脚本,实验中直接把jenkins用户改为root用户
vim /etc/sysconfig/jenkins
hh.png
然后重启jenkins服务
/usr/local/tomcat/bin/shutdown.sh #因为是部署在Tomcat下的,如果是不带Tomcat的直接systemctl restart jenkins (等5秒后再启动)
/usr/local/tomcat/bin/startup.sh
修改一下三个目录的属主属组,原本是jenkins,最好确认一下其他相关目录和文件是否也是root属主的
chown -R root.root /var/lib/jenkins
chown -R root.root /var/cache/jenkins
chown -R root.root /var/log/jenkins
修改配置文件后最好连jenkins页面的用户也切换一下(因为不会切换用户,所以我改成了免账户密码登录,哈哈哈哈哈)
2.脚本的结尾全改为expect eof
ii.png
用interact会一直停留在远程主机的终端上退不出来,所以无法执行本地的任何命令和脚本
做完以上修改后,再次构建,完美搞定!
网友评论