告别原始:自动化部署项目之Jenkins

Jenkins官网:https://jenkins.io/

安装

https://jenkins.io/download/

以centos为例:

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

yum install jenkins

安装完成之后运行service jenkins start启动Jenkins,Jenkins的运行需要JAVA环境, 如果没有安装JAVA,则会提示Starting jenkins (via systemctl): Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.

安装JAVA:

yum install java

启动成功之后在浏览器输入http:${Jenkins所在的主机ip}:8080进行Jenkins的初始设置。

设置

部署项目

码云平台的部署教程:https://gitee.com/oschina/Gitee-Jenkins-Plugin

在“源码管理”设置Repository URL之后,可能会出现提示:

Failed to connect to repository : Command "git ls-remote -h git@gitee.com:wx-dev/weixue-h5.git HEAD" returned status code 128:
stdout: 
stderr: Host key verification failed. 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

说明SSH的配置有问题,需要在Credentials中添加在代码托管服务中设置的公钥所对应的私钥。点击Add +,然后类型选择SSH Username with private key,在Private Key中勾选Enter directly,再将私钥粘贴进去即可。

邮箱设置

系统设置-Jenkins Location

系统管理员邮件地址:me@zhaoyuxiang.cn

系统设置-邮件通知

以QQ邮箱为例:

SMTP服务器:smtp.qq.com
用户默认邮件后缀:@zhaoyuxiang.cn

勾选 使用SMTP认证
用户名:QQ号码
密码:QQ邮箱-设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-生成授权码(需要开启POP3/SMTP服务)
使用SSL协议 勾选
SMTP端口 465

${工程}-配置-构建后操作

选择E-mail Notification,填写接收人邮箱。

配置webhooks

webhooks的远程 HTTP URL与Jenkins的全局安全配置相关。

系统管理-全局安全配置-访问控制-授权策略

如果勾选的是任何用户可以做任何事(没有任何限制)远程 HTTP URL只需填写http://${ip}:${port}/project/${projectName}

如果勾选的是登录用户可以做任何事远程 HTTP URL需要填写http://${adminName}:${APIToken}@${ip}:${port}/project/${projectName}

其中,APIToken在用户-${某个用户}-设置-API Token中。

将构建完的文件上传到远程服务器

系统管理-管理插件-可选插件中选择插件Publish Over SSH并安装。

安装完成之后进入系统管理-系统设置-Publish over SSH-SSH Servers进行设置:

Name 给SSH Servers取个名字
Hostname 远程服务器ip
Username 登录服务器的用户名
Remote Directory 接收文件的路径

然后点击“高级”展开选项,勾选Use password authentication, or use a different key,在Passphrase / Password中填入Username对应的密码。

Port 登录服务器的端口,一般默认是22

全部填写完毕之后,点击Test Configuration测试是否能成功连接远程服务器。

成功连接之后,就可以在工程中进行具体的设置。

进入${工程}-配置-构建后操作-增加构建后操作步骤-Send build artifacts over SSH,新增一个SSH Server:

Name 选择对应的远程服务器
Source files 相对当前工程文件夹的路径
Remote directory 相对该远程服务器全局设置的Remote directory的路径

比如当前的工程构建完成之后生成了一个dist目录,这个目录里的文件是我要上传到远程服务器的,Source files只需要填写dist/**即可。

在远程服务器的全局设置中,Remote directory填写了/www/wwwroot/h5_weixue,然后不填写工程的Remote directory,那上传的所有文件会出现在远程服务器的/www/wwwroot/h5_weixue/dist中,如果我在此处填写了dist,那么上传的所有文件会出现在远程服务器的/www/wwwroot/h5_weixue/dist/dist中。

默认情况下,Source filesh和Exec command是必填的,会提示Either Source files, Exec command or both must be supplied。Source filesh必填还是合理的,但是比如我只想进行一些静态文件的传输,还需要必填Exec command就不合理了,如果不需要在远程服务器执行脚本,只需要在系统管理-系统设置-Publish over SSH勾选Disable exec即可,这是全局的设置。如果需要针对单个SSH Servers进行设置,只要勾选对应SSH Servers的Disable exec即可。