『互联网架构』软件架构-jenkins搭建和 maven gitlab自动化部署流程(上)(五)

2019-03-04 14:42:57 浏览数 (1)

几年前没用过jenkins的时候,每次都需要用eclipse打个war包,然后小心翼翼的上传到服务器,给服务器原有的war包改个名字,mv到bak目录中,停止服务,删除原有的webapps的项目,再把新上传的war包放进到tomcat的webapp说的目录下,启动项目。每次改个html的标签的名字都需要重新上传,每次都是这么繁琐的操作。其实小公司还可以容忍,如果是比较大的项目,还持续停留在这个脚本上运维人员都累死了,因为有可能一次部署几十个项目。源码:https://github.com/limingios/netFuture/tree/master/jenkins/ysource/idig8

jenkins

  • 历史

Hudson是在2004年的夏天由Sun公司开发 2005年2月开源并发布了第一个版本。 Hudson发布的时候CruiseControl是CI界的老大哥,但是很快,在大约2007年的时候Hudson已经超越CruiseControl。2008年5月的JavaOne大会上,Hudson获得了开发解决方案类的Duke's Choice奖项。从此,小弟翻身做大哥,Hudson成为CI的代名词。 2010年9月,乌龟壳公司偷偷把Hudson®™变成了注册商标。2010年11月,Hudson社区的核心开发人员发现并angry了,双方进行了不太友好的会谈,不出意料的谈崩了。圣诞节过后, 2011年的第一场雪,比以往来的要晚一些,几个秃顶的大叔在McDonald‘s的豪华包间里做了一个艰难的决定: mv -f hudson jenkins Hudson和Jenkins都拥有代码; Hudson有Oracle和Sonatype's corporate的支持和Hudson的注册商标 Jenkins拥有的是大多数的核心开发者,社区,和后续更多的commit。

jenkins git 、maven gitlab 、tomcat 构建持续集成环境 流程

1> 开发者将新版本push到git server (Gitlab)。 2> Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测) 3> jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。 4> 我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度。 jenkins的工作原理是先将源代码从gitlab中拷贝一份到本地,然后根据设置的脚本进行build。我们可以看出,整个系统的关键就是那个build脚本,用来告诉jenkins在一次集成中需要执行的任务。

这次将结合一个比较简单maven聚合项目,结合之前的maven私服,git私服和将要搭建的jenkins完成自动化构建。

  • gitlab,nexus私服,jenkins,tomcat的搭建

通过源码生成4个虚拟机,准备工作。vagrant已经安装了 对应的docker。 用docker安装nexus就是为了避免环境变量,用户赋权等复杂的操作。对于vagrant的如何安装不用的系统不一样可以参看 mac 安装vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/ window安装vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系统类型

IP地址

节点角色

CPU

Memory

Hostname

Centos7

192.168.66.100

gitlab

2

2G

gitlab

Centos7

192.168.66.101

jenkins

2

2G

jenkins

Centos7

192.168.66.102

nexus

2

2G

nexus

Centos7

192.168.66.103

tomcat

2

2G

tomcat

(1). 虚拟机vagrant讲述安装的步骤

代码语言:javascript复制
vagrant up

(2).机器window/mac开通远程登录root用户下

代码语言:javascript复制
su -
# 密码
vagrant
#设置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd

四台机器公共执行命令

代码语言:javascript复制
su -
#密码
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的机器不是使用docker,其他全部使用docker全装

66.100 gitlab安装

管理员:root 密码:123456789qwe

代码语言:javascript复制
mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab 
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 编写脚本
代码语言:javascript复制
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d 
    --env 'DB_NAME=gitlabhq_production' 
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' 
    --env 'DB_EXTENSION=pg_trgm' 
    --volume ${cur_dir}/postgresql:/var/lib/postgresql 
    sameersbn/postgresql:10
docker run --name gitlab-redis -d 
    --volume ${cur_dir}/redis:/var/lib/redis 
    sameersbn/redis:4.0.9-1
docker run --name gitlab -d 
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio 
    --publish 10022:22 --publish 10080:80 
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' 
    --env 'GITLAB_ROOT_PASSWORD=123456789qwe' 
    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' 
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' 
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' 
    --volume ${cur_dir}/gitlab:/home/git/data 
    sameersbn/gitlab[root@gitlab ~]#
  • 启动gitlab

重点说下 不要用rz来上传我提供的start.sh脚本sh start.sh的时候会报错。sh start.sh需要执行两遍,不要问我为啥,我也不知道,第一遍执行玩容器自己就挂掉了,在启动一遍就好了

代码语言:javascript复制
sh start.sh
sh start.sh
66.101 jenkins安装

这个不使用容器,相对来说安装比较复杂些。这个机器不光需要安装jenkins,还需要安装maven,git,jdk1.8

  • 为了让各位老铁安装jdk1.8 git 和maven美滋滋,写了个脚本
代码语言:javascript复制
# @Author: liming
# @Date:   2018-11-26 23:14:59
# @Last Modified by:   liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 个人公众号  编程坑太多

#!/bin/bash
SOFT_PATH=/opt/soft

if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夹已经存在"
fi

yum install -y wget 
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd` 

#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`

#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git

#追加环境变量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#输出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看环境变量

如果环境变量不生效请执行:source /etc/profile

代码语言:javascript复制
source /etc/profile
git --version
java -version
mvn -v

`

  • 下载jenkins

官网:https://jenkins.io/

下载jenkins

代码语言:javascript复制
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先这样启动目的是直接可以看到秘钥因为第一次安装需要秘钥
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#这是后台启动
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &
  • pipline的插件全部安装
  • 之前我也用docker安装过jenkins插件老安装失败各种错误。这次我不用docker插件全部安装成功
66.102 nexus安装

管理员:admin 密码:admin123

代码语言:javascript复制
mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
代码语言:javascript复制
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v  ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 启动脚本
代码语言:javascript复制
sh start.sh
66.103 tomcat安装

tomcat 还讲什么?不懂?干就完了 兄弟!

代码语言:javascript复制
mkdir tomcat
cd tomcat
vi start.sh
  • 脚本
代码语言:javascript复制
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 启动脚本
代码语言:javascript复制
sh start.sh
  • war包放在这里

以上所有的程序安装已经完毕,开始进行自动化的部署流程

应用

IP地址

服务

端口

安装应用

安装方式

gitlab

192.168.66.100

gitlab

10080

gitlab

docker

jenkins

192.168.66.101

jenkins

8888

jdk8 maven3.2 git2.8

shell

nexus

192.168.66.102

nexus

8081

nexus

docker

tomcat

192.168.66.103

tomcat

8080

tomcat

docker

PS:下一步将关联这4台服务器,进行本地代码的提交到gitlab,然后由jenkins操作命令的形式进行自动化的部署。

0 人点赞