前几天我把前后端项目都部署到服务器上了,可是我发现修改后的的node服务很好部署但是前端修改完后还得打包然后部署,很麻烦,如果你比较感兴趣这个部署项目的整体流程可以链接走你,所以我昨天和今天就研究了这个jenkins,我实现的主要功能是,它会连接你的gitHub,如果你点击jenkins的时候就会把你点击的项目直接打包并发布;或者你想做的其他逻辑它也会帮着你去自动去做!
Jenkins 是一个可扩展的持续集成引擎。
主要用于:
首先安装Jenkins之前,linux中必须安装好了JDK和Maven,如果还没有安装过,下面准备好安装教程;
https://dbfront-firstbucket.oss-cn-chengdu.aliyuncs.com/jdk-17_linux-x64_bin.tar.gz
https://dbfront-firstbucket.oss-cn-chengdu.aliyuncs.com/apache-maven-3.9.0-bin.tar.gz
这个是oss地址,点击链接即可直接下载,可能以后会维护有的问题,如果下载不能用的话可以去以下方式
JDK:

一定选择17版本和选择指向的下载,这都是血与泪的教训呀!,!
Maven:

之后在window下载linux系统下的安装包,之后就用rz命令去导入我们的Linux系统即可;可以看我上篇文章的安装node和mongodb链接走你
一定要把我们的两个bin目录放到环境中,否则就噶了!
我们的准备工作完成了!
浅试一下

我们打上这个指令出现下面这个就是成功了!
创建jenkins文件夹
mkdir jenkins
说到这里不得不提下我们的ChatGPT

这是我搜索的记录,简直太强了。
1、然后我们直接在当前新建的文件夹去
就会在文件中直接生成jenkins.war

2、输入指令
nohup java -jar jenkins.war --httpPort=8080
就成功了
如果我们直接使用 java -jar jenkins.war
3、输入
netstat -tlnp
查看下当前的进程

发现有8080,启动成功
我们在上面启动了jenkins服务,我们直接去访问我们jenkins的页面
服务器地址+8080端口,走你

访问jenkins的时候,有个初始化密码,需要你输入,这边查找初始化密码的方法也在下面
输入成功后



我们的jenkins启动好了!
以下是jenkins的全局配置,包含我们的汉化、gitHub以及java在服务器的目录位置;
我们打开页面全是英文头疼,我们来配置汉化版的jenkins



刷新下浏览器



在github中选择settings

选择Developer settings

选择Personal Access Token --> Generate new token, 新建一个有读写权限的用户。 如下勾选选项:

确定后生成token,复制下来保存好。
登录进jenkins后选择系统管理 => 系统设置 => Github Server 添加信息

添加jenkins凭据

完成后点击连接测试,连接成功信息如下:

然后选择系统管理 => 全局工具配置 在JDK安装中去掉勾选自动安装,在JAVA_HOME中输入java jdk安装的根目录,我的安装根目录是/usr/
我们可以到环境
vim /etc/profile


完成后回到首页新建任务,填写任务名称,选择构建自由风格的软件项目,点击确定。

总结下我们上面的流程
我们在gitHub上进行一个具有个性化的配置(读写的配置),并生成唯一token,在jenkins中我们通过全局给jenkins添加了一个我们自己的token,然后确定了服务器的java文件目录!
下面就分两种情况
一种是我们的 服务器有我们的git和gitHub的地址可以git push和pull
另一种就是没有git的地址和gitHub的ssh的密钥,我们就只能在jenkins配置(有些麻烦推荐第一种)
服务器有我们的git和gitHub的地址可以git push和pull
我们上述创建任务后
点击我们自己项目的配置

点击BuildSteps=>增加构建后操作步骤=>zshell
输入如下代码
cd /dangbo/functionTools/dbfrontFunctionTools
git pull
npm run docs:build
这个意味着,我们点击jenkins时候直接会进入这个目录并git pull、随后执行npm run dcs:build

点击应用

显然我们成功了
另一种就是没有git的地址和gitHub的ssh的密钥,我们就只能在jenkins配置(有些麻烦推荐第一种)



选择轮询SCM,输入出发时间

选择执行shell,输入构建脚本

最后保存,点击立即构建,然后项目会有构建进度。

整个项目搭建下来踩了很多的坑,也遇到很多的小问题,很多时间都是在解决问题,总的来说其实不是很难,如果不熟悉linux的话会有点吃力。
先去gitHub配置一个自己的token=》放到jenkins的全局中=》全局的还有jdk在linux的位置=》最后我们的配置是分了两种情况=》一种是我们服务器能拉取代码,就不用做我们的Git和gitHub的配置了,直接写自己想做的指令即可,在shell位置=》另一种就是能拉取我们的代码,也就是服务器没有配置gitHub的ssh密钥,我们就得在jenkins的位置配置所有的东西,很麻烦。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit