目标
代码托管在gitlab,提交后本地电脑jenkins编译生成静态网页并上传网站到阿里云服务器。
阿里云服务器配置
1.安装nginx
apt install nginx
控制台开放80 443端口,此时可以直接在其它电脑访问hello nginx
2.安装ftpd
参考https://www.linuxidc.com/Linux/2016-12/138563.htm
https://help.aliyun.com/document_detail/51998.html?spm=5176.11065259.1996646101.searchclickresult.6b4919cbKRhazu
apt install vsftpd //安装服务,版本3.0.3
mdkir /var/gitbook //网站目录
useradd -d /var/gitbook -s /bin/bash www // 新添加用户www用于ftp上传,最好用-s /sbin/nologin限制该用户不能本地登录
passwd www // 为用户www设置密码gitbook
修改/etc/vsftpd.conf
anonymous_enable=NO #禁止匿名访问
local_enable=YES
write_enable =YES
chroot_local_user=YES
service vsftpd start // 启动服务
此时客户端可以正常连接ftp,账号密码使用刚才设置的www即可。
3.配置nginx网站目录为/var/gitbook
参考https://blog.csdn.net/ljp1919/article/details/72833982
在/etc/nginx/conf.d目录中新建文件gitbook.conf,配置如下
server {
server_name hostname;
root /var/gitbook/;
index index.html;
}
本地电脑jenkins配置
1.配置编译任务
配置git下载代码
编译命令调用windows batch command,命令为
gitbook build
上传命令
"C:\Program Files\PuTTY\pscp.exe" -l www -pw gitbook -r -scp "D:\Jenkins\workspace\gitbook\_book\*" 1.1.1.1:/var/gitbook/
注意:jenkins调用windows batch command时如果提示命令找不到,需要到服务中设置登录账户为当前账户,要求当前账户需要有设置密码。
Jenkins需要安装gitlab hook plugin和ruby-runtime插件,安装后者时如果报错,可以参考https://stackoverflow.com/questions/44403642/jenkins-plugin-installation-failing 调整jenkins安装路径。
如果需要gitlab提交代码后主动触发jenkins编译,在jenkins的任务配置-构建触发器中选择触发远程构建,输入一个身份验证令牌,我这边简单点就写bookdesigntoken。
然后可以直接在浏览器中输入http://10.198.44.136:8080/job/gitbook/build?token=bookdesigntoken 验证是否可以触发jenkins编译。
然后在gitlab项目的settings中,选择integrations项,url填写刚才的url, trigger选择push event, 确认add webhook即可。
2.配置ftp上传脚本并调用
filezilla尝试上传文件时出现服务器发回了不可路由的地址,使用服务器地址代替。参考https://bbs.aliyun.com/read/321822.html 修改连接模式为主动模式。
当登录时出现vsftpd: refusing to run with writable root inside chroot()时,原因在于www用户的home目录可写,ftp服务端配置www用户登录时chroot。可以有两种解决方式,一种是将www用户的home目录取消w权限,第二种为ftp服务端配置www用户登录时不执行chroot。参考 https://blog.csdn.net/bluishglc/article/details/42398811
此处直接配置chroot_local_user=NO,标准配置方式为配置chroot_local_user=YES,配置chroot_list_enable=YES,然后在chroot_list_file=/etc/vsftpd/chroot_list文件中添加用户www作为例外。