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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdZy1Wau-1596675955350)(https://upload-images.jianshu.io/upload_images/11223715-8f67051b451e50bf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

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。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qR6s4Hsg-1596675955362)(https://upload-images.jianshu.io/upload_images/11223715-94ce4a5767771e01.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

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地址节点角色CPUMemoryHostname
Centos7192.168.66.100gitlab22Ggitlab
Centos7192.168.66.101jenkins22Gjenkins
Centos7192.168.66.102nexus22Gnexus
Centos7192.168.66.103tomcat22Gtomcat

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

vagrant up

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

su -
# 密码
vagrant
#设置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd

四台机器公共执行命令

su -
#密码
vagrant
service docker restart
yum install -y lrzsz

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

66.100 gitlab安装

管理员:root
密码:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab 
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 编写脚本
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需要执行两遍,不要问我为啥,我也不知道,第一遍执行玩容器自己就挂掉了,在启动一遍就好了

sh start.sh
sh start.sh

66.101 jenkins安装

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

  • 为了让各位老铁安装jdk1.8 git 和maven美滋滋,写了个脚本
# @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%3A%2F%2Fwww.oracle.com%2F; 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

source /etc/profile
git --version
java -version
mvn -v   

  • 下载jenkins

官网:https://jenkins.io/

下载jenkins

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

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/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
  • 启动脚本
sh start.sh

66.103 tomcat安装

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

mkdir tomcat
cd tomcat
vi start.sh
  • 脚本
#!/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
  • 启动脚本
sh start.sh

  • war包放在这里

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

应用IP地址服务端口安装应用安装方式
gitlab192.168.66.100gitlab10080gitlabdocker
jenkins192.168.66.101jenkins8888jdk8 maven3.2 git2.8shell
nexus192.168.66.102nexus8081nexusdocker
tomcat192.168.66.103tomcat8080tomcatdocker

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

©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:上身试试 返回首页