草庐IT

docker安装jenkins并且通过jenkins部署项目(超详细and靠谱)

Java大憨 2023-04-14 原文

一、简介:
本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代码,然后根据你自己项目的pom.xml文件,把项目打包成jar,并且自动把这个最新的jar运行起来,达到一键式构建的目标。

二、操作
(1) 首先得先在服务器上装好这三个东西: jdk,git,maven。不知道怎么安装的同学可以移步到我写的这三篇文章中:JDK安装maven安装git安装

(2) 好,完成上面三个软件的安装以后,接下来是正题开始:

docker   pull   jenkins/jenkins:2.344      #拉取jenkins镜像
docker run -d -p 10240:8080 -p 10241:50000 -v /var/jenkins_mount:/var/jenkins_home   -v  /usr/local/maven/apache-maven-3.8.5:/usr/local/maven   -v /usr/local/git/bin/git:/usr/local/git    -v /etc/localtime:/etc/localtime --name myjenkin 镜像id   #启动jenkins镜像

上面的启动jenkins镜像是最重要的,这个指令里面包含了git和maven的文件映射:

-v  /usr/local/maven/apache-maven-3.8.5:/usr/local/maven   

解释:这里是将本地项目中的apache-maven-3.8.5映射到/usr/local/maven;注意了,这里的服务器的maven地址你们要根据自己自身的安装地址来灵活选择,我这里的maven安装地址是:/usr/local/maven/apache-maven-3.8.5。

-v /usr/local/git/bin/git:/usr/local/git

解释:将服务器中的git映射到jenkins容器中,我这里的服务器上的git的安装地址是/usr/local/git/bin/git,同样的,童鞋们也要根据自身的git安装地址来选择。

jenkins容器启动以后,咱们就需要到阿里云或者是腾讯云中,将端口为10240打开,具体怎么打开10240端口,你们也可以看我写的:阿里云如何开放端口;(我是不是有点太贴心了~~~)

(3) 接下来就可以见证奇迹了:浏览器访问:你的服务器ip:10240。不出意外,你就能访问到jenkins了。

首先映入眼帘的是这个,jenkins需要你输入初始密码,你就到上面图片的提示的路径下把初始密码拷贝过来:/var/jenkins_home/secrets/initialAdminPassword,这个就是路径啦,去拷贝吧。

接下来,这里咱们选择:“安装推荐的插件”;这个安装推荐插件的时间可能会比较久,请耐心等待。

(4) 好,现在咱们还需要再安装两个插件: publish over ssh和Maven Integration plugin 同学可以点击: 系统管理->插件管理 -> 可选插件中进行输入安装。如下图所示:


如果看不懂英文,那么同学们还可以再安装一个中文插件:如下图,输入chinese就可以看到。

(5) 安装好上一步中的几个插件之后,接下来需要在jenkins中配置一下git和mavn: 同学可以依次点击:系统管理 -> 全局工具配置 -> 找到Git和Maven


下图是Git,如果没有那些什么Name,Path to Git什么的额输入框,那么可以点击一下Add Git按钮,然后依照图中内容输入,没有报红字提示即表示配置成功了。

下图是Maven的配置

(6) 配置好Git和Maven以后,接下来是比较复杂的一个环节,配置全局凭据,这个全局凭据看起来高大上,其实挺好理解,就是一个配置项,然后你配置好以后,你就可以通过jenkins登录到你想进入的那台服务器里面,你还可以在那台服务器上执行你设计的指令。而咱们第二步中安装的publish over ssh插件,就是用来干这事的!在这之前,为了文章的篇幅不要太长,我把一部分内容写在这篇文章中:centos7.6生成ssh私钥与公钥,大家一定要先依照此文章做完,再来继续阅读本文。
想必大家已经看完我我刚刚说的那篇文章,那么请童鞋们把在那边文章的生成的私钥找到,我们待会有用哦。
童鞋们依次点击: “系统管理” -> “系统配置” -> Publish over SSH


如下图所示:这是如何让jenkins能够登录远程服务器的配置


完成以上配置以后,可以点击Test configuration按钮,如果显示:success就代表服务器配置成功了,你的jenkins可以远程登录服务器了。

(7) 做足了前面准备工作,童鞋们,你们还得再看一篇文章,我不是故意的,但是确实得这样,我如果写在一起真的篇幅太长了,如果你们觉得我是故意给自己引流,那你们可以取百度搜一下"gitLab仓库怎么生成ssh keys"看看其他大佬的,我自己写的文章在这里:通过ssh keys拉取gitLab代码。终于可以来新建一个任务了:


然后童鞋们请直接看到”源码管理“

依次点击: Git - > Add Repository -> 添加(jenkins凭据)


下图是添加凭据:

UserName是你的gitLab用户名,然后点击Enter directy,点击Add,然后把我刚刚叫大家搜索的“gitLab仓库怎么生成ssh keys”这里面生成的私钥找出来,也就是"id_rsa"文件,把这个私钥放到里面。

最后点击“添加按钮”即可。

如下图所示,当咱们添加好凭据之后,就可以填上gitLab的代码地址,然后选择咱刚刚新添加的凭据,我这里的凭据名字就叫做lzcwxh1314。

好,最复杂的凭据之后,接下来咱们需要选择要拉取的代码分支,童鞋们根据自身情况灵活配置。

(8) 配置好上一步的Git之后,咱们还需要配置一下如何打包:
选择: Pre Steps -> 填入如下图的指令

pom.xml

clean install -Dmaven.test.skip=true

(9) hellohello,有没有同学跟着做到这一步了,这真的是最后最后一步了,请相信我。接下来还需要做最后一个配置:
选择:构建后操作-> 选择添加构建后的步骤

然后选择Send Build artifacts over SSH

选择添加之后,会出现如下的配置卡,这里的SSH Server咱选择第六步中配置好的SSH Server。

因为咱们做了docker的文件映射了,所以jenkins容器上生成的jar包,其实也会映射到咱们本机上,所以咱们就无需将Jar包通过publish over ssh插件再发送了,所以这里我只需要执行代码即可。

#第一步是进入到服务器中生成好的jar包的目录下
cd /var/jenkins_mount/workspace/pay-wx-learn/target

#第二步是根据jar包的名字获取运行的pid,并且将该进程杀死
ps -ef | grep pay-wx-learn-0.0.1-SNAPSHOT.jar   |   grep -v   grep   |   awk '{printf $2}'  |  xargs kill -9

#最后一步就是将这个jar后台启动了,并且将日志输出到warpper.log中。
nohup java -jar pay-wx-learn-0.0.1-SNAPSHOT.jar >warpper.log &2>1 &

三、校验
终于啊,神功告成了,咱们可以到enkins的首页这边来构建了

然后点一下这个进度条,就可以详细看到此次构建的内容

同学们可以再点一些控制台输出,即可看到对应的日志信息了。

总结一下,jenkins通过docker部署挺简单的,比较烦人的就是里面的各种配置,其中最为头疼的是源码管理中的Git配置,还要Publish over SSH中登录远程服务器,这两个都涉及了生成SSH keys的私钥公钥,如果不了解私钥公钥真的会一下子懵掉,说实话我自己碰壁研究了半个月才算是勉强成功了,所以自己赶紧写下来这篇博客记录一下,如果你跟着我的博客最后还是没有成功,我先和你说个对不起,然后你可以私聊我一下或者在评论区留言,我真挺愿意和同学们一起探讨解决的。

好了,以上就是我的分享了,祝大家事事顺利,天天好开心~

有关docker安装jenkins并且通过jenkins部署项目(超详细and靠谱)的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  7. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  10. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

随机推荐