Jenkins是一个可扩展的持续集成引擎。
持续集成,就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础。
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也意味着每天可能会发生多次集成。
每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
- 开发者写代码上传gitlab
- jenkins帮我们到gitlab里面把最新代码拉取出来(clone),jenkins通过插件可以对拉取的代码完成自动化测试。测试完成后,可以自带把代码(编译,打包....)。创建一个共享目录,把打包的代码共享出去(比如NFS共享或者FTP共享)
- web1,web2这样的服务器就可以自动到jenkins共享里面下载代码,让用户访问
- Jenkins官网:https://jenkins.io/
- Jenkins官网文档:https://www.jenkins.io/zh/doc/
- Jenkins学习文档:https://www.w3cschool.cn/jenkins/jenkins-5h3228n2.html
- jenkins安装包:http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
- OpenJDK:http://jdk.java.net/java-se-ri/11
- 清华镜像:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/
jenkins:192.168.4.30(RHEL8的系统)
关闭防火墙、SELinux
[root@jenkins ~]# yum -y install git java-11-openjdk postfix mailx
[root@jenkins ~]# systemctl enable postfix
[root@jenkins ~]# systemctl start postfix
[root@jenkins ~]# yum -y install ./jenkins-2.358-1.1.noarch.rpm
[root@jenkins ~]# systemctl start jenkins.service
[root@jenkins ~]# systemctl enable jenkins.service
第一次访问会提示初始密码的位置,粘贴到网页中,点击《继续》
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
bdd08c16204f471d8ecd5c4787bdf289






2.4.1、重置管理员密码



2.4.2、插件管理
[root@jenkins ~]# ls
anaconda-ks.cfg jenkins-2.358-1.1.noarch.rpm jenkins-plugin-1.20.9-lts-rc.tar.gz
[root@jenkins ~]# yum -y install tar
[root@jenkins ~]# tar -xf jenkins-plugin-1.20.9-lts-rc.tar.gz
[root@jenkins ~]# cp -rp jenkins-plugin-1.20.9-lts-rc
jenkins-plugin-1.20.9-lts-rc/ jenkins-plugin-1.20.9-lts-rc.tar.gz
[root@jenkins ~]# cp -rp jenkins-plugin-1.20.9-lts-rc/* /var/lib/jenkins/plugins/ # -p代表保留权限
[root@jenkins ~]# systemctl restart jenkins.service


2.4.3、设置邮箱
2.5.1、准备一份构建的项目代码素材
[root@gitlab ~]# cd gitlabtest/
[root@gitlab gitlabtest]# cp -r www_template/* /root/gitlabtest/
[root@gitlab gitlabtest]# git add .
[root@gitlab gitlabtest]# git commit -m "add web"
[root@gitlab gitlabtest]# git push -u origin master
[root@gitlab gitlabtest]# git log --oneline
[root@gitlab gitlabtest]# git tag v1
[root@gitlab gitlabtest]# git push -u origin v1
2.5.2、新建任务




说明:如果没有v1,则需要到git客户端执行git tag创建标签,git push回传



[root@jenkins ~]# ls /var/lib/jenkins/workspace/
myweb
[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/
404.html about.html blog.html contact.html css images index.html js README.md single.html work.html 说明.txt
注意:默认Jenkins拉取代码都是存放到/var/lib/jenkins/workspace/myweb目录下,如果多次拉取不同版本,会导致数据被覆盖。为了避免这种情况,拉取v1版代码,最好能在myweb下创建一个子目录v1,拉取v2版代码,最好能在myweb下创建一个子目录v2。

[root@jenkins ~]# rm -rf /var/lib/jenkins/workspace/myweb/*
[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/
myweb-v1
[root@jenkins ~]# rm -rf /var/lib/jenkins/workspace/myweb/*
[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/
myweb-v1
现在Jenkins已经可以到gitlab上面拉取代码到本地/var/lib/jenkins/workspace/,下面就需要在Jenkins服务器上做一个FTP共享,因为文件多不方便管理,然后把拉取的代码打包(tar,war,zip),把这个包放到ftp共享目录。
2.6.1、在Jenkins服务器上安装ftp的软件包
[root@jenkins ~]# yum -y install vsftpd
[root@jenkins ~]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES # 改成YES,允许匿名访问ftp
[root@jenkins ~]# mkdir -p /var/ftp/deploy/packages
[root@jenkins ~]# chown -R :jenkins /var/ftp/deploy/ # 修改权限将目录所属组修改为jenkins
[root@jenkins ~]# chmod -R 775 /var/ftp/deploy/ # 修改权限让jenkins组对该目录有读写权限
[root@jenkins ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@jenkins ~]# systemctl start vsftpd
2.6.2、接下来修改任务,让Jenkins自动打包代码,放到FTP共享目录下



- shell脚本说明:
# 定义ftp共享目录的变量
pkg_dir=/var/ftp/deploy/packages
# myweb-$web就是Jenkins拉取代码的路径,把拉取的代码拷贝到ftp共享目录下
cp -r myweb-$web $pkg_dir
# 把拉取的隐藏目录.git给删除(我们需要最新版,而不需要所有历史版本)
rm -rf $pkg_dir/myweb-$web/.git
# cd到ftp共享目录下
cd $pkg_dir/
# 把ftp里面的代码整体打包,做成tar包
tar czf myweb-$web.tar.gz myweb-$web
# 有了tar包,原来的目录就可以删除
rm -rf myweb-$web
# 校验文件的Hash值,放到一个文件中
md5sum myweb-$web.tar.gz | awk '{print $1}' > myweb-$web.tar.gz.md5
cd ..
# 找一个文件,记录当前操作的版本
echo -n $web > ver.txt
2.6.3、构建前ftp共享目录是空的
[root@jenkins ~]# ls /var/ftp/deploy/packages/

[root@jenkins ~]# ls /var/ftp/deploy/packages/
myweb-v1.tar.gz myweb-v1.tar.gz.md5
[root@jenkins ~]# ls /var/ftp/deploy/
packages ver.txt

2.7.1、安装httpd做web服务器
[root@web ~]# yum -y install httpd
[root@web ~]# systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
2.7.2、方式一:人为的下载共享目录的代码,再放到web网页
[root@web ~]# yum -y install wget tar
[root@web ~]# wget ftp://192.168.4.80/deploy/packages/myweb-v1.tar.gz
[root@web ~]# tar -xf myweb-v1.tar.gz -C /var/www/html/
[root@web ~]# ls /var/www/html/
myweb-v1
2.7.3、方式二:编写脚本,将脚本放到计划任务自动完成
[root@web ~]# vim web.sh
#!/bin/bash
ftp_url=ftp://192.168.4.80/deploy # 定义变量:FTP共享目录
web_dir=/var/www/html # 定义变量:网页根路径
# 定义函数:down_file(该函数的作用是从FTP服务器下载代码数据到网站根目录)
down_file(){
# 获取FTP服务器上面最新构建的代码版本号,curl是基于命令行的浏览器,-s选项为静默访问,不显示下载过程
version=$(curl -s $ftp_url/ver.txt)
# 将服务器上面的版本文件下载到web服务器的/var/www/html/目录下,-q选项为静默模式下载,不显示下载过程,-O选项可以指定将文件下载到哪里
wget -q $ftp_url/ver.txt -O $web_dir/ver.txt
# 下载代码数据的打包文件,根据前面获取的版本号,下载对应的版本数据打包文件
wget -q $ftp_url/packages/myweb-$version.tar.gz -O $web_dir/myweb-$version.tar.gz
# 对下载下来的数据打包文件计算HASH值(哈希值),awk过滤仅显示第一列数据结果
hash=$(md5sum $web_dir/myweb-$version.tar.gz| awk '{print $1}')
# 使用curl访问ftp服务器上面的HASH值
ftp_hash=$(curl -s $ftp_url/packages/myweb-$version.tar.gz.md5)
# 对比本地和FTP服务的HASH值是否一致,如果不一致代表数据损坏了
# 如果一致就可以解压该数据包,将数据解压到网站根目录下/var/www/html/
if [ "$hash" == "$ftp_hash" ];then
tar -xf $web_dir/myweb-$version.tar.gz -C $web_dir
fi
}
# 判断如果本地没有/var/www/html/ver.txt文件,则直接调用前面的函数下载代码数据
if [ ! -f $web_dir/ver.txt ];then
down_file
fi
# 盘如果本地有/var/www/html/ver.txt文件,则判断本地版本文件和FTP版本文件是否一致
# 一致就不再下载FTP的数据,如果不一致则调用前面的函数下载新的代码数据包
if [ -f $web_dir/ver.txt ];then
ftp_ver=$(curl -s $ftp_url/ver.txt)
local_ver=$(cat $web_dir/ver.txt)
if [ "$ftp_ver" != "$local_ver" ];then
down_file
fi
fi
[root@web ~]# chmod +x web.sh
[root@web ~]# ./web.sh
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答
我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在Heroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class
出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t
1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva