本文介绍使用Jenkins一键将NodeJS(Vue)前端项目打包并上传到生产环境服务器,这里使用的是直接打包静态页面,发送到远程服务器Nginx配置目录的方式,首先确保服务器环境配置好,安装Nginx,运行目录,日志存放目录等。
一、服务器环境配置Nginx安装也有多种方式,源码安装、yum安装、Docker安装等,安装并不复杂,我们这里采用Docker安装的方式,由于习惯于标准化及存档,方便在不同服务器部署相同的环境,我们这里使用了Docker Compose来定义Nginx容器配置信息。
1. Nginx的docker-compose-nginx.yml定义文件编写Docker及Docker Compose安装配置,前面有详细介绍,这里不再赘述,以下是Nginx容器的Docker Compose定义文件内容:
version: '3'services: ##nginx配置 nginx: image: nginx:latest restart: always container_name: nginx environment: - TZ=Asia/Shanghai ports: #端口映射,前面是宿主机端口,后面是服务端口 - 80:80 - 443:443 volumes: - /data/container/nginx/html:/nginx/html - /data/container/nginx/www:/var/www - /data/container/nginx/logs:/var/log/nginx - /data/container/nginx/etc:/etc/nginx - /data/container/nginx/etc/nginxnf:/etc/nginx/nginxnf - "/etc/localtime:/etc/localtime" - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" #若用到ssl,可以引入 - /bxl/container/nginx/ssl:/nginx/ssl
部分参数说明:
ports:端口映射,前面是宿主机端口,后面是容器内部服务端口volumes:目录映射,前面是宿主机目录,后面是容器内部目录2. 部署及备份目录准备新建 /opt/tmp 目录,用于Jenkins打包后,通过 Publish Over SSH插件将包传输到服务器的临时目录(如果前面创建过,这里无需再创建)。新建 /opt/bak 目录,用于存储所有部署过的包备份,方便后续版本回滚。此目录可能会占用很大空间,所以需要选择一个磁盘空间大的挂载目录(如果前面创建过,这里无需再创建)。新建 /opt/script 目录,用于Jenkins将包传输完成之后,执行安装、备份操作的相关命令脚本(如果前面创建过,这里无需再创建)。新建 /data/container/nginx/html,用与存放发布后的静态页面。新建 /data/container/nginx/www,映射Nginx容器内的/var/www目录。新建 /data/container/nginx/logs,映射Nginx容器内的/var/log/nginx目录,存放nginx运行日志。新建 /data/container/nginx/etc,映射Nginx容器内的/etc/nginx目录新建 /data/container/nginx/etc/nginxnf,映射Nginx容器内的/etc/nginx/nginxnf配置文件新建 /bxl/container/nginx/ssl,映射Nginx容器内的/nginx/ssl目录mkdir -p /opt/tmp /opt/bak /opt/script /data/container/nginx/html /data/container/nginx/www /data/container/nginx/logs /data/container/nginx/etc /bxl/container/nginx/sslchmod -R 777 /opt/tmp /opt/bak /opt/script /data/container/nginx/html /data/container/nginx/www /data/container/nginx/logs /data/container/nginx/etc /bxl/container/nginx/ssl3.根据系统部署要求编写Nginx配置文件nginxnf,以下是简单的配置方法,正常情况下https请求还需要配置ssl证书,还有ipv6配置等,后面详细讲解Nginx配置。一定要将修改后的nginxnf文件放到/data/container/nginx/etc/目录下,否则nginx启动时会报错找不到配置文件。
server { listen 80; server_name 域名; gzip on; gzip_buffers 32 4K; gzip_comp_level 6; gzip_min_length 100; gzip_types application/javascript text/css text/xml text/plain application/x-javascript image/jpeg image/gif image/png; gzip_disable "MSIE [1-6]\."; gzip_vary on; #charset koi8-r; access_log /var/log/nginx/portal.access.log main; location / { root /nginx/html/gitegg_portal; try_files $uri $uri/ /index.html; index index.html index.htm; } location /gitegg-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://172.17.0.1:8080/; } }4. 部署脚本编写说明定义入参,可以通过Jenkins任务将参数传入脚本中,我们定义了下面2个参数:project_name="portal" : 服务名称portal_home="/data/container/nginx/html" : 静态页面路径对参数进行检查,是否未传入参数,这里根据自己的实际情况判断,比如必须传入哪些参数,就设置参数的个数不能小于几。
#param validateif [ $# -lt 1 ]; then echo "you must use like this : ./publish_portal.sh <project_namename> [portal home dir]" exit fi入参赋值,如果有参数传入,则取服务参数,如果没有参数传入则取默认值
if [ "$1" != "" ]; then project_name="$1"fiif [ "$2" != "" ]; then portal_home="$2"fi删除原部署的静态文件,解压当前发布包
# 删除rm -rf "$portal_home"/index.html "$portal_home"/favicon.ico "$portal_home"/_appnfig.js "$portal_home"/logo.png "$portal_home"/resource/ "$portal_home"/assets/# 解压cd /opt/tmp/portaltar -zxvf portal.tar.gz备份当前发布的静态文件包
#bak project_nameBAK_DIR=/opt/bak/portal/$project_name/`date +%Y%m%d`mkdir -p "$BAK_DIR"cp /opt/tmp/portal/portal.tar.gz "$BAK_DIR"/"$project_name"_`date +%H%M%S`.tar.gz#remove tmprm -rf portal.tar.gz将解压的静态文件copy到Nginx目录下
#copy portal codecp -r * "$portal_home"删除临时文件
#remove tmprm -rf index.html favicon.ico _appnfig.js logo.png resource assets打印执行完成的命令
echo "Portal is starting,please try to access $project_name conslone url"完整的安装部署脚本
project_name="portal"portal_home="/data/container/nginx/html"#param validateif [ $# -lt 1 ]; then echo "you must use like this : ./publish_portal.sh <project_namename> [portal home dir]" exit fiif [ "$1" != "" ]; then project_name="$1"fiif [ "$2" != "" ]; then portal_home="$2"fiecho "portal code copy"#publish project_nameecho "$project_name publishing"rm -rf "$portal_home"/index.html "$portal_home"/favicon.ico "$portal_home"/_appnfig.js "$portal_home"/logo.png "$portal_home"/resource/ "$portal_home"/assets/cd /opt/tmp/portaltar -zxvf portal.tar.gz#bak project_nameBAK_DIR=/opt/bak/portal/$project_name/`date +%Y%m%d`mkdir -p "$BAK_DIR"cp /opt/tmp/portal/portal.tar.gz "$BAK_DIR"/"$project_name"_`date +%H%M%S`.tar.gz#remove tmprm -rf portal.tar.gz#copy portal codecp -r * "$portal_home"#remove tmprm -rf index.html favicon.ico _appnfig.js logo.png resource assets#start portalecho "Portal is starting,please try to access $project_name conslone url"将部署脚本上传到服务器的/opt/script目录下,并赋予可执行权限
chmod 755 publish_portal.sh二、新建Jenkins配置打包任务,部署打包后的Vue页面1. Dashboard > 新建任务,输入任务名称,选择“构建一个自由风格的软件项目”,点击确定。
2. 项目配置,进入到任务配置页丢弃旧的构建 :这里在保持构建的最大个数填写5,当然可以根据自己情况填写,否则旧的构建包会一直存在占用磁盘空间。源码管理:配置git代码地址、用户名密码和版本分支,如果是需要用户名密码的git库,那么下面需要选择访问的用户名密码,这里一定要使用用户名密码方式,使用token的方式无法选中。可以在下方add,也可以在Jenkins全局Credentials 中添加,方便其它任务使用。构建触发器:可选可不选,这个根据自己的需求选择,任务在什么情况下出发构建。构建环境:这里选择Provide Node & npm bin/ folder to PATH,选择我们在系统配置中配置的Node版本。Build Steps:选择执行shell,在shell窗口中输入需要执行的打包命令。shell脚本完整内容:echo $PATHnode -vpnpm -vpnpm installpnpm run buildcd distrm -rf portal.tar.gztar -zcvf portal.tar.gz *cd ../构建后操作:选择构建后将包发送到服务器
Post Steps:将打包后的文件发送到服务器,并执行设置好的脚本,这里选择Run only if build succeeds,当构建成功时Post。Exec command:将打好的包发布到环境之后,在环境上执行的部署脚本命令。/opt/script/publish_portal.sh 是脚本文件、portal 是项目名称、/data/container/portal 是前端代码存放路径。/opt/script/publish_portal.sh portal /data/container/portal
3. 运行构建任务立即构建查看构建日志:点击立即构建之后,下方会出现进度条,点击进度条就可以进入构建日志界面。4. 构建成功后,下方会给出构建成功提示,此时登录远程服务器查看文件是否部署成功即可。脚本目前采取稳定的前台模式,且不读取内存,纯模拟手动,极致降低风险,目前为止自写自用1年多下来4个号无封号制裁情况。 但脚本和多开从来都是官方的打击对象,不保证未来某段严打期间会有问题,如果一点风险都不想承担的建议不要碰这些东西。
说明关于用机器视觉识别来进行的yolo脚本目前没有再维护 ,想查看源码或想尝试该方式的,详情移步:https://github/SilverComet7/yolov5-DNF,欢迎给个star
后续会陆续上传DNF的相关资料,包括但不限于脚本,角色推荐,装备搭配等相关玩法
.Q文件说明:召唤未央.Q:召唤师的未央自动循环爬楼,1-5层不限地图种类
司南玉荣.Q:a. 洗司南: 自动洗第一行1-5格司南票,洗司南额外爆率用b. 清理玉荣:自动清理前40位格子的玉荣
如何使用下载群里的资源包 , 将资源包解压,将 dnf-img和大漠插件3.1233 两个文件夹放桌面
点击qm2014chs.exe,安装按键精灵
打开按键精灵,将.Q文件拖入目录,启动测试脚本有无报错,按提示解决问题
将召唤的一键召唤放在快捷栏a键位,进入地图F10开启自动循环爬楼
领取方式关注公众号ChrisCoder 回复 脚本资源包 ,获取召唤自动脚本
#挑战30天在头条写日记#
在不断发展的游戏开发领域,人工智能 (AI) 已经成为游戏规则的改变者。人工智能工具正在彻底改变游戏的开发方式,使整个过程更加高效、富有创意和动态。以下我们总结探讨了在行业中掀起波澜的七种人工智能工具。
1. Scenario网址:https://wwwenario/
Scenario AI 人工智能生成的游戏内容。为您的游戏创建高质量、风格一致的专有资产。
通常,游戏开发人员分属两大阵营。要么精通游戏的美术领域……要么就是对美术一窍不通。如果你属于后者,或者你想要提高美术素养但却没有时间,那么 Scenario 将帮助你改变整个游戏规则。顾名思义,Scenario 就是一款针对美术知识产权的 AI 工具。它帮助公司和开发人员构建自定义美术生成器和 AI 引擎,而无需担心图像所有权问题。尽管人工智能在游戏设计中的应用尚处于初级阶段,但 Scenario 已然相当成熟,你可以利用其训练模型,创建与现有游戏资产相似的内容和图形。这样,你就可以源源不断地创作完全属于自己的游戏作品。
下面是以“这张图片展示了一款JRPG冒险类游戏的场景。在画面中,我们可以看到一位勇敢的主角,他身穿厚重的盔甲,手持一把闪烁着神秘光芒的剑。他站在一个巨大的迷宫入口前,脸上充满了坚定和决心。迷宫的深处充满了未知和危险,但主角毫无畏惧,准备迎接挑战。背景中,夕阳的余晖洒在古老的城堡上,给整个场景增添了一种神秘的氛围。”为描述内容生成的四张图像:
2. Promethean AI网址:https://wwwmetheanai/
Promethean AI 允许没有编程经验或美术经验的小白直接通过语音命令创建游戏美术。
Scenario 和 Leonardo (后面将介绍)等工具都专注于游戏开发的美术方面,而 Promethean AI 侧重的则是后端开发中的其它繁重工作。
Promethean 就像抹在砖头上的灰泥,它把所有的要素结合在一起,形成一个整体。游戏公司和开发人员利用其协助处理非创意性任务,从数字资产管理到虚拟世界创建和设计等。
总体而言,这款工具简化了流程,并填补了专业知识或资源方面的空白。
以下是直接在场景中输入椅子生成的模型:
3. Layer.ai网址:https://layer.ai/
Layer 是一个强大的工具,它使用 AI 为游戏环境生成 3D 图层(选用asset默认风格生成是免费的)。它旨在帮助游戏开发人员轻松创建丰富、详细的环境。Layer 允许您生成各种 3D 图层,从地形到植被,全部基于您的规格。它是一款多功能工具,可用于各种游戏开发任务,从创建详细的游戏环境到优化资产以获得更好的性能。
主要特点:
AI 驱动的 3D 图层生成支持多种图层类型可定制的设计参数,下面是以“这张图片展示了一款JRPG冒险类游戏的场景。在画面中,我们可以看到一位勇敢的主角,他身穿厚重的盔甲,手持一把闪烁着神秘光芒的剑。他站在一个巨大的迷宫入口前,脸上充满了坚定和决心。迷宫的深处充满了未知和危险,但主角毫无畏惧,准备迎接挑战。背景中,夕阳的余晖洒在古老的城堡上,给整个场景增添了一种神秘的氛围。”为描述内容生成的四张模型:
模型参数可以直接在界面修改。
4. Leonardo AI网址:https://leonardo.ai/
Leonardo AI (默认有150免费积分)是游戏资产创建领域的游戏规则改变者。
与 Scenario 类似,Leonardo AI还可以创建游戏内置资产和图形。
不过,后者最大的亮点是能够快速创建多个版本的游戏资产,以找到最适合你自身游戏创意的资产。假设你的游戏资产创意已经初步成型,但你还不太确定角色应该是什么样子。
Leonardo.ai 可以快速生成创意并进行迭代,这意味着你不仅可以针对角色生成新的资产,还可以持续不断地进行更新,在此过程中不断调整,直到对最终结果满意为止。如果你希望 AI 游戏设计无需太多实际动手操作,那么 Leonardo.ai 还可以搭载预先训练好的模型,自动生成可以直接使用的资产。如果你预计马上就会出现危机,需要快速产出成果时,这款工具就非常有用。
下面是以“这张图片展示了一款JRPG冒险类游戏的场景。在画面中,我们可以看到一位勇敢的主角,他身穿厚重的盔甲,手持一把闪烁着神秘光芒的剑。他站在一个巨大的迷宫入口前,脸上充满了坚定和决心。迷宫的深处充满了未知和危险,但主角毫无畏惧,准备迎接挑战。背景中,夕阳的余晖洒在古老的城堡上,给整个场景增添了一种神秘的氛围。”为描述内容生成的四张模型(生成效果比lay.ai好啊):
5. InWorld网址:https://inworld.ai/
InWorld 是一款人工智能驱动的工具,旨在帮助游戏开发者创建逼真的角色。它使用人工智能根据您的规格生成逼真的角色,让您比以往更轻松地为您的游戏创建独特的高品质角色。
InWorld 允许您自定义角色的外观,从面部特征到服装,让您完全控制角色设计。
主要特点:
AI驱动的角色生成逼真的人物图像详细的定制选项6. Charisma网址:https://charisma.ai/
Charisma 是一款人工智能驱动的非常强大的自动生成unity游戏的工具,旨在帮助游戏开发者创建身临其境的叙事。它使用人工智能生成动态故事情节、角色和对话,将游戏叙事的深度和交互性提升到一个新的水平。
“我以前和你一样是个冒险家,直到我的膝盖中了一箭。”
要是你听到过这段引文,而且每次在《天际》游戏中都会听到这句话,都快听腻了,那么你肯定会因为知道游戏角色开发工具 Charisma AI而兴奋。这款工具可以自动生成 NPC。生成的 NPC 可以给出适当的情绪反应、记录玩家互动,甚至运用 AI 生成的声音,让每一个角色都独一无二。目前多家大型游戏公司已经在使用这款工具,如 Epic Games 和索尼互动娱乐(通过 PlayStation),以及华纳兄弟、梦工厂等知名企业。
以“一个勇者冒险游戏生成解救被占领的村庄”为例生成的故事,下面是故事的主角“勇者”形象编辑,可以通过unity3d导出整个游戏:
7. Meshy网址:https://wwwshy.ai/
Meshy 是一款人工智能驱动的工具,可简化 3D 网格的使用过程。它旨在帮助游戏开发人员管理、分析和优化他们的 3D 资产,使其成为任何 3D 游戏项目的宝贵工具。
Meshy 的 AI 算法可以分析您的 3D 模型并提供详细的见解,帮助您优化资产以获得更好的性能。它还可以自动执行繁琐的任务,例如重新拓扑和 UV 映射,从而节省您的时间和精力。借助 Meshy,您可以确保您的 3D 资产始终适合游戏。
主要特点:
AI 驱动的网格分析自动重新拓扑和 UV 映射详细的性能洞察以下是重新优化一个“房屋模型”的例子: