jenkins+svn安装
参考资料:http://blog.csdn.net/wuxuehong0306/article/details/50016547
https://www.ibm.com/developerworks/cn/opensource/os-autotesting-jenkins-testing/
http://www.imooc.com/article/12626
http://aoyouzi.iteye.com/blog/2294990
https://jenkins.io/
资源包:链接:http://pan.baidu.com/s/1qYibCAS 密码:u4m7
一. 安装环境
System: CentOS 6.8x64 (deploy.example.com)
Jenkins: Jenkins ver. 1.650
Ansible: Ansible 2.1.0
Gitlab: GitLab 7.14.3
Svn安装
# yum install subversion (SVN服务器)
mysql-server (用于codestriker)
httpd mod_dav_svn mod_perl (用于支持WEB方式管理SVN服务器)
sendmail (用于配置用户提交代码后发邮件提醒)
wget gcc-c++ make unzip perl* (必备软件包)
ntsysv vim-enhanced (可选)
基本的SVN服务器配置
新建一个目录用于存储SVN所有文件
# mkdir /mnt/svn
新建一个版本仓库
#svnadmin create /mnt/svn/project
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102556388-1433063374.png
在conf目录下的文件的意义
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102605248-44453335.png
authz文件是权限控制文件
passwd是帐号密码文件
svnserve.conf SVN服务配置文件
(1)svnserve.conf:svn服务配置文件。
其中关于svnserve.conf的文件配置项分为以下5项 而且这写是需要打开的,详细解释如下
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /var/svn/svnrepos # 认证空间名,版本库所在目录建议使用相同的用户名口令数据文件
下面是本机配置
# cat svnserve.conf | grep -v '^#' | grep -v '^$'
anon-access = none
auth-access = write
password-db = /mnt/svn/project/conf/passwd
authz-db = /mnt/svn/project/conf/authz
realm = /mnt/svn/project
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102620435-2000844962.png
(2)passwd: 用户名口令文件
在块中添加用户和密码,格式:帐号=密码,如quwenzhe=123456
在svnserve.conf文件里启用这个文件。然后配置如下:
# cat passwd | grep -v '^#' | grep -v '^$'
text=123456
pm=123456
server_group=123456
client_group=123456
text_group=123456
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102628779-650163151.png
(3)authz: 权限配置文件
# cat authz | grep -v '^#' | grep -v '^$'
project_p=pm,text
project_s=server_group
project_c=client_group
project_t=test_group
@project_p=rw
* =
@project_p=rw
@project_s=rw
* =
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102639295-793154186.png
启动svn
# svnserve -d -r /mnt/svn
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102649373-469231548.png
完成后测试svn是否正常
Linux端测试
#检测版本库
svn checkoutsvn://172.16.110.233/project/--username=text --password=123456
#删掉不要的版本svn cl --remove文件名
# svn --username=pm co svn://172.16.110.233/project
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102722060-509564169.png
Win端测试
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102733216-896324997.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102739826-1508994575.png
回到svn可以看到
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102748795-1446179518.png
Linux客户端(清除本地缓存)
方法一:
linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -rf ~/.subversion/auth
以后再操作svn会提示你输入用户名,这时就可以使用新的了
方法二:
svn操作时带上–username参数,比如svn –username=smile co svn_path local_path
建立Jenkins到svn的账号
账户: svn
密码:qpmall2017
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102806966-1475679346.png
完成以上操作后,安装web工具支持apache和nginx都可以,为了方便,我们直接
yum -y install http*
完成后我们需要对配置文件进行修改
如果有subversion.conf 这个文件就最好,没有的话,自己创建
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102102818654-635082626.png
# vim subversion.conf
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath /mnt/svn #svn的根目录
AuthType Basic #Basic认证方式
AuthName "Authorization" #认证时显示的信息
AuthUserFile /mnt/svn/project/conf/passwd #用户文件
AuthzSVNAccessFile /mnt/svn/project/conf/authz #访问权限控制文件
Require valid-user #要求真实用户,不能匿名
</Location>
然后看看apache是否支持svn模块
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102103119404-216447219.png
最后看看apache默认的端口,可以直接使用80,也可以修改默认端口,为了避免冲突,我做了修改
#vim /etc/httpd/conf
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102103126232-948292684.png
以上做完后,我们可以启动服务看下效果了
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105044185-1830122724.png
尽管svn在之前的测试时是好的,但是和apache服务搭配后,无限循环在下面的页面,直到报错,所有的svn用户都进不去(svn的conf文件中的passwd记录的用户)
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105051701-1245581217.png
经过排查,发现是apache的自动模块的用户没有加入到svn的passwd文件中
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105058529-1103006139.png
这个文件在svn服务创建的时候自带的,所以我们需要在这个文件中加入相关的用户和密码
所以我们在svn的conf目录下
执行#htpasswd -c passwd svn
输入密码123456
——————————
备注htpasswd -c passwd username增加用户
只有第一个用户加-c,其余用户不用-c
htpasswd -D passwd username 删除用户
htpasswd -m passwd username 修改密码
加非常重要,因为用htpasswd的方式加用户会负载掉,所以每次加完用户,都需要补一下该节点, 如下图:
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105127545-829663022.png
————————————————
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105131795-1256754213.png
此时svn用户已经备加入用户组了,我们重新启动服务
# service httpd restart
# svnserve -d -r /mnt/svn
虽然安全进入,但是此时又报错了
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105139341-1880804568.png
看提示是因为没有权限被拒绝了,所以我们需要给这个svn用户一个权限,此时就需要修改
/mnt/svn/project/conf/authz文件中的权限了,修改完成后如下:
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105152966-1830507139.png
完成后我们重新启动服务后,效果如下
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105201154-1081416926.png
此时说明我们成功的建立了svn和apache服务的联系
三. Jenkins配置
#wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
# yum-yinstall jenkins
#vim /etc/sysconfig/jenkins
# cat /etc/sysconfig/jenkins | grep -v '^#'| grep -v '^$'
JENKINS_HOME="/home/qpmall/jenkins"
JENKINS_JAVA_CMD=""
JENKINS_USER="root"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
登录网页(http://IP:8080),出现如下界面
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105215607-1758750866.png
按照提示打开密码文件
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105223998-1019918612.png
在登陆页中的password处输入7df23528ef4b42e685718c5fd645d9f3
后出现
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105238029-1276869113.png
我们为了偷懒选择安装所有
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105256513-703443118.png
完成后界面
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105322904-1602692394.png
这里有2个选择,一个是用原先他给你的那个用户名和密码(点击左下方as admin),一个是建立自己的,我们这里自己创建一个
用户名:qpmall
密码:qpmall123
电子邮件:qpmall@qpmall.com
完成后点击Save and finsh
此时会提示你完成
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105339435-2133184527.png
完成后的界面,如下,中文的,开心吗,O(∩_∩)O哈哈~
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105358013-221923829.png
现在开始安装自动化需要的插件Publish Over和SVN Publisher
过程如下
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105408873-217520675.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105419763-1624677874.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105431013-786806618.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105446076-9072812.png
在这个页面进行配置的修改,程序的设定和维护
现在要保证jenkins和引用服务器的联通性
在Jenkins服务器中做如下操作
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your> Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
30:95:9a:43:ed:4e:a3:ad:0a:b7:72:e2:8e:74:66:77 root@bogon
The key's randomart image is:
+--[ RSA 2048]----+
| ... |
| ..o |
| .o+ |
| +o+ |
| *S. |
| . o |
| ..+.. E |
|..*oo.o |
|.oo+o. |
+-----------------+
完成后有以下文件
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105508341-241653504.png
在jenkinsfs服务器的家目录~/.ssh/下会有私钥id_rsa和公钥id_rsa.pub
在应用服务器上创建~/.ssh文件夹和~/.ssh/authorized_keys文件,并将jenkins服务器的公钥id_rsa.pub中的内容复制到authorized_keys文件
应用服务器上重启ssh服务,service sshd restart
现在jenkins服务器可免密码直接登陆应用服务器,如下图
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105534576-1481714552.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105555326-664155750.png
Passphrase:密码(key的密码,如果你设置了)
Path to key:key文件(私钥)的路径
SSH Server Name:标识的名字(随便你取什么)
Hostname:需要连接ssh的主机名或ip地址,此处填写应用服务器IP(建议ip)
Username:用户名
Remote Directory:远程目录(根据需要填写文件传到此目录下)
“Use password authentication, or use a different key”:使用密码验证(这里使用了密钥认证所以不开启)
配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105613341-667146864.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105849435-1903754184.png
如果有多台应用服务器,可以点击”增加“,配置多个“SSH Servers”
点击“保存”以保存配置
系统配置好ssh连接后,到项目配置中配置构建后发布的步骤
点击(项目名“fin_test1”–>左侧菜单的“配置”)来更改项目的配置
在配置最后找到“增加构建后操作步骤”,选择"Send build artifacts over SSH"
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105635170-1535729705.png
可以选择git或者svn仓库,但是我们用svn
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105643888-131793162.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105930357-1329812283.png
——————————————————————
PS:这里介绍下如何添加Credentials
在 jenkins 上设置 Credentials,然后再新建job的时候使用设置的 Credentials 即可
在jenkins界面,依次点击: Credentials -> System -> Add domain:
Domain Name: 填写你git服务器的地址,如 github.xxx.com
Description: 随便写一点描述,如 This is the Credential for github
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105940920-1142852782.png
点击 ok 后,在点击 “adding some credentials?”
进入页面后,可以选择 Username with password 或者 SSH Username with private key, 根据你的情况选择,这里我们选择 Username with private key:
Username: 随便起一个名字,以便在创建 Job 的时候使用该 Credential
Private Key:可以指定文件,也可以使用默认的 ~/.ssh,当然也可以直接将私钥复制粘贴到此处。
Passphrase: 如果你在创建 ssh key 的时候输入了 Passphrase 那就填写相应的Passphrase,为空就不填写
ID: 空
Description: 空
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102105953560-1063444810.png
点击 ok 后 Credential 就创建好了。
如果你再新建 Job 就可以看到我们的 Credential 选项了:
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110148404-1915312017.png
——————————————————————————————————
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110157295-1523938340.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110220373-145598817.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110225623-700278167.png
然后保存,执行。
现在一套自动跟新系统完成了,如果是代码上线,这个很合适。
如果是java上线的话,这个架构需要在优化一下,比如比对文件和重启tomcat
https://common.cnblogs.com/images/loading.gif
关于Jenkins的自动打包(这个是自动化部署的前提)
当你建立好一个job后,会有一个工作空间,如下图
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110305138-1150816902.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110315904-1206157888.png
这个pom.xml文件很重要,关系到maven是否打包成功,记得问开发要,理论上开发给你的是正确版的(他们自己打包测试过),里面会有各种聚会和私服地址,还有模块等内容
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110329295-1029979719.png
要告诉Jenkins把pom.xml放到这里,否则会在job里面提示找不到相关文件(这里可以自动放,也可以手动放,看需要)
文件内容大致如下
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110342529-307455529.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110352045-269645237.png
在你的job里面选择如下
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110359654-689731187.png
然后在命令栏中输入你想要的操作
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110405107-218576713.png
如果不想使用shell,也可以用别的比如ant等
这里我用的shell命令和脚本来完成包java包的备份和部署
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110411904-1916612323.png
完成后可以执行job了
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110417857-722950474.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110433654-1781097046.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110439529-2105751109.png
https://images2017.cnblogs.com/blog/1185622/201711/1185622-20171102110444857-345000719.png
此版本是测试环境,还有需要完善的地方,等正式线上没有问题后,会再次更新本文档
页:
[1]