前提:承接上篇 flutter1.9 + vscode + Andorid SDK + java JDK实践,用flutte-web做了一个简单的导航网页(这里推荐老孟的组件库),现在发布一个flutter-web做的门户导航,导航资源(常用地址)在项目json文件中
目的: 任何有权限的人更改项目的json文件(增减常用网站资源)后,提交代码到git就能自动发布
准备工作和配置
1. 服务器一台(安装flutter,jenkins,nginx)
2. 登录服务器工具(我用secureCRT => 用到这个就想到java大神--陈涛)
2. 配置jenkins, 配置gitlab
3. 配置nginx访问页面
第一步: 安装secureCRT
crt详细破解教程 就不赘述了。看完链接记得这两个点:
1. 输入name和company 用截图图片上的
2. 点击generate重新生成license key 再粘贴过去否则不会成功
第二步: 在linux上安装flutter
前提:我推荐先看一篇关于linux环境变量的文章 环境配置文件的区别
了解了基础知识,我们来操作
1. 安装flutter
我选在在home目录下, git clone https://github.com/flutter/flutter
很慢的话,我就直接在下载到本地(链接要是打不开,就去上面的github上下载)
2. 如果是下载到本地,就用CRT上传本地安装包到服务器
(1)在 CRT 按ALT+P进入sftp
(2)pwd查看当前所在目录
(3)cd /home (我下载在home目录)
(4)put 本机文件路径(put C:\Users\Downloads\flutter_linux_1.17.3-stable.tar.xz)
(5) 在服务器home目录下查看是否上传成功
(6)
将xz文件解压成tar文件 xz -d filename (压缩xz -z filename)
将tar文件解压 tar -xvf filename (压缩tar -cvf filename)
或者一次性到位tar xvJf filename
3. 解压了安装包出现了flutter文件夹,接下来就是配置环境变量
进入 vi ~/.bash_profile
按 i 进行插入编辑
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=/home/flutter/bin:$PATH
按 esc 退出插入模式 :wq保存退出
source ~/.bash_profile 使保存生效
4.验证是否有了flutter命令
执行 flutter doctor -v
如果可以了 查看分支 flutter channel
切换分支flutter channel beta (web项目才需要到beta)
尝试一下flutter build web打包可不可以
提示我暂时不支持,所以切记要开启web支持 , 执行:flutter config --enable-web
执行 flutter doctor -v 能看到有devices就ok 了
第三步: 在服务器上安装jenkins
service jenkins start 提示service 命令找不到,那就安装一个
bash: service: command not found
1. yum list | grep initscripts
2. yum install initscripts -y
第四步:配置gitlab push触发jenkins自动打包
注意:三个插件:gitlab(只有有这个插件才会出现下图图一钩子,如果是github触发就需要相应的github插件,下面的钩子名称也会有所区别),gitlab hook, Build Authorization Token Root
下图中的token是点问号生成的,注意了。
这里我只描述问题。按照第一篇就可以配置成功,第二篇辅助
问题1:gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录
解决1:下图圈出来的地方,管理员有一个扳手样的设置,进入admin area后选择---setting ---network---找到下图中的outBound request 勾选 allow requests to the local network from hooks services
问题二: 下载插件总是失败,gotlab hook 依赖的ruby-runtime提示不支持java11
现在高版本jenkins都支持java11,甚至会提示你升级。但是插件没跟上兼容。但是在虚拟机上查看java版本java -version看到的是8. 让后一度困惑。
后来发现乌班图上面有两个java版本,一个11,一个8. 切换java版本后gitlab hook安装成功
```
//此命令将列出Ubuntu存储库中可用的所有JDK软件包,系统上仅安装带有“i”前缀的软件包
sudo aptitude search jdk // 查看所有安装的jdk
which java // 安装目录
sudoupdate-alternatives --config java // 切换java版本
```
如果是下面的错误,多下载几次吧。要不就去官网下载后上传
java.net.UnknownHostException: updates.jenkins.io
配置成功后,点击test测试,返回200代表成功,或者修改代码push,看见jenkins有构建记录,那代码在哪里呢
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
代码已经可以自动化部署到我们的jenkins所在的服务器,目录为jenkins的workspace目录
在这里
/var/lib/jenkins/workspace
这个工作目录包含代码 和打包后的文件,可以指定到其他文件夹,按照下面的设置代码就会被放到指定文件夹
jenkins部署到多台服务器,有兴趣可以参考链接
问题2: 当服务器有了flutter命令后,打包却不成功,jenkins构建错误记录:提示找不到flutter命令
这里就要注意 jenkins执行shell环境变量问题,需要知道jenkins找环境变量的顺序
解决2:
在执行命令前都去刷一遍变量文件:source ~/.bash_profile 就可以了
可以发现构建前会出来一堆的文件信息,最下面就是我们配置的环境变量,找到了环境变量就可以构建了
第五步 :在服务器安装nginx,配置好后访问页面
安装很简单
在安装nginx前首先要确认系统中安装了
安装: yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
(1) 下载 wget http://nginx.org/download/nginx-1.12.2.tar.gz
# 如果没有安装wget
# 下载已编译版本
$ yum install wget
(2) 解压 tar.gz 使用tar命令进行解压 : tar -zxvf nginx-1.12.2.tar.gz
tip:解压到指定的文件夹 :tar -zxvf nginx-1.12.2.tar.gz -C /usr/java
gz文件的解压 gzip 命令: gzip -b nginx.gz
(3) 进入解压后的文件夹 cd nginx-1.12.2
(4) 执行 ./configure 来查看是否可以执行安装
安装报错误的话比如:“C compiler cc is not found”,这个就是缺少编译环境,安装一下就可以了 yum -y install gcc make gcc-c++ openssl-devel wget
安装Nginx时报错
./configure: error: the HTTP rewrite module requires the PCRE library.
解决:yum -y install pcre-devel openssl openssl-devel
如果没有error信息,就可以执行下边的安装了:
(5) 安装 make -j4 && make install
(6) 此时已经有nginx文件夹生成,返回进入到nginx目录,执行sbin/nginx -t 看结果是否成功 (在/usr/local/nginx)
(7) 编辑nginx配置文件
到nginx目录
cd usr/local/nginx
vim conf/nginx.conf 配置端口和打包后的路径
:wq保存退出后,在nginx目录下重启nginx
重启服务 sbin/nginx -s reload
问题:在重启时报错 提示 nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
解决: [root@localhost nginx]/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
再重启即可
curl 127.0.0.1:8324 尝试访问本地文件,可行就很nice
问题:如果在浏览器打不开,要考虑是不是防火墙没开这个8342 端口
检查系统版本cat /etc/redhat-release
显示 CentOS Linux release 7.5.1804 (Core)
CentOS7 默认使用firewalld防火墙,也有的是iptables防火墙,去这里仔细看看命令检查,开启端口 传送门
查看端口是否开启 : firewall-cmd --query-port=8324/tcp
开启端口 : firewall-cmd --add-port=8324/tcp --permanent ( --permanent #永久生效,没有此参数重启后失效)
重启防火墙: systemctl restart firewalld
问题:访问页面提示403 forbidden
修改nginx配置文件第一行: vim conf/nginx.conf
user root; 给nginx 用户root权限
tips:重启服务器后记得要重启jenkins 和 nginx ,当然你也可以配置开机自启动