搭建SVN
yum install subversion
rpm -ql subversion
svnversion --version 看安装成功没
mkdir -p /var/svn/svnrepos 创建svn版本库目录
svnadmin create /var/svn/svnrepos 创建版本库,会在/var/svn/svnrepos目录下生成如下这些文件
进入conf目录,authz文件是权限控制文件,passwd是帐号密码文件,svnserve.conf SVN服务配置文件
vi passwd
在[users]块中添加用户和密码,格式:帐号=密码,如dan=dan
vi authz
在末尾添加如下代码:
[/]
dan=rw
w=r
意思是版本库的根目录dan对其有读写权限,w只有读权限。
vi svnserve.conf
打开下面的几个注释:
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /var/svn/svnrepos # 认证空间名,版本库所在目录
vi svnserve.conf
打开下面的几个注释:
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /var/svn/svnrepos # 认证空间名,版本库所在目录
启动svn版本库
svnserve -d -r /var/svn/svnrepoos
Jenkins
方便网站部署和持续集成
需要一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库如SVN,GIT等
一个jenkins持续集成服务器
下载jdk,解压
vi /etc/profile
export JAVA_HOME=/usr/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
source /etc/profile ; java -version
下载apache-tomcat,解压,移到usr/local目录下,改名成tomcat
/usr/local/tomcat/bin/startup.sh
wget -c http://mirrors.jenkins-ci.org/war/latest/jenkins.war;
jar -xf解压war文件并移到tomcat发布目录
访问8080,系统设置
配上jdk和maven,应用,保存
下载maven解压移到data下
cd /data
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/binaries/apache-maven-3.1.1-bin.tar.gz
mv apache-maven-3.1.1 maven
创建新项目,选maven项目
配上svn,下面的build里的Goals and options加上clean install -Dmaven.test.skip=true
点项目后面的启动,看console out,最后会有个war文件
clock of the subversion server appears to be out of sync. This can result in inconsistent check out behavior.
提示这个错误,是你主机的时间不对,ntp调下时间
Caused by: java.lang.NoSuchFieldError: DEFAULT_USER_SETTINGS_FILE
提示这个错误,是maven版本太高,换成3.3以下
maven报错,就换个maven,maven里要有lib
这里的执行流程:
1通过svn取代码2进行编译,读取pom文件的依赖3生成war包
在target目录下有个.war包,我们只需要把这个包部署到远程机器,这里部署到本地tomcat下
自定义发布目录,在server.xml配置文件末尾 前加入如下行:
ture表示实时变动,想自定义生效,要把webapps下的默认内容删掉
解压edu.war
我们发现jenkins并没有自动部署,最好是shell脚本定制部署,通过ansible,saltstack,ssh批量部署
远程部署:jenkins把这个eru.war通过http发布,或者scp edu.war,然后解压到tomcat发布目录,删掉work这个缓存文件
点项目,配置,最下面有个add post-build step,选execute shell
这里的命令是在jenkins上运行
1.发布http包cp /root/.jenkins/workspace/shaitu/target/edu.war /var/www/html
1.或者在项目下面选构建后操作,选Archive the artifacts,填**/target/*.war
这样jenkins会自动拷贝所有的war包到/root/.jenkins/jobs/shaitu/builds/lastSuccessfulBuild/archive/target/,但是这个包是在这个工程结束了才存,这里留的是上个版本的,所以还得自己从target里拷过来。。
2.远程执行脚本ssh -l root 192.168.1.10* '/bin/bash /tmp/auto_deploy_war.sh'
3.直接在远程执行脚本ssh [email protected]* 'bash -x -s' < /data/sh/auto_deploy_war.sh
其中-x和-s是打印执行过程,可以去掉
作业:写成脚本自动部署100台
用ansible自动部署,在剧本里写
- hosts: all
remote_user: root
tasks:
- name: deploy launch war
shell: cd /usr/local/tomcat/webapps/ROOT;rm -rf *;wget http://192.168.1.107:8080/edu.war;jar -xf edu.war;/usr/local/t
omcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh
后台执行命令
#screen
#输命令
#exit