实验环境

主机 服务 备注 192.168.1.1 Git、GitLab、Maven 内存4G,可联网 192.168.1.4 Git、Jenkins、Maven 内存4G,可联网 192.168.1.6 Nexus、Maven 内存3G,可联网

实验目的

当在GitLab上使用mvn生成Java项目代码后,通过Git上传到GitLab的项目仓库中,Jenkins会通过构建触发器,触发对GitLab项目进行打包,最后将jar包上传到Nexus

搭建环境

搭建GitLab/Maven

192.168.1.1

准备Java环境

tar zxf jdk-8u201-linux-x64.tar.gz

mv jdk1.8.0_201/ /usr/local/java

vim /etc/profile # 文件末尾添加

export JAVA_HOME=/usr/local/java

export JRE_HOME=/usr/local/java/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

rm -rf /usr/bin/java

source /etc/profile

java -version # 验证

安装Maven

tar zxf apache-maven-3.6.0-bin.tar.gz

mv apache-maven-3.6.0 /usr/local/maven

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile

source /etc/profile

mvn -v # 验证

安装GitLab

# 安装git

yum -y install git

# 安装GitLab

rpm -ivh gitlab-ce-12.3.0-ce.0.el7.x86_64.rpm

配置GItLab启动

# 修改配置文件中访问GitLab页面的url

vim /etc/gitlab/gitlab.rb

# 修改

external_url 'http://192.168.1.1'

# 编译配置GitLab并启动

gitlab-ctl reconfigure # 第一次需要很长时间

gitlab-ctl start # 启动gitlab

firewall-cmd --add-port=80/tcp # 放行80端口供web设置管理

登录GitLab的web管理界面设置

访问http://192.168.1.1

第一次访问需要设置管理用户密码,默认管理用户root,密码最少8位

使用管理用户登录

搭建Jenkins/Maven

192.168.1.4

准备Java环境

tar zxf jdk-8u201-linux-x64.tar.gz

mv jdk1.8.0_201/ /usr/local/java

vim /etc/profile

# 文件末尾添加

export JAVA_HOME=/usr/local/java

export JRE_HOME=/usr/local/java/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

rm -rf /usr/bin/java

source /etc/profile

java -version # 验证

 安装Maven

tar zxf apache-maven-3.6.0-bin.tar.gz

mv apache-maven-3.6.0 /usr/local/maven

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile

source /etc/profile

mvn -v # 验证

 安装Jenkins

# 安装git

yum -y install git

# 安装Jenkins

rpm -ivh jenkins-2.204.3-1.1.noarch.rpm

# 启动Jenkins

systemctl start jenkins

# 放行jenkins端口

firewall-cmd --add-port=8080/tcp

进入web页面安装Jenkins基本插件

访问http://192.168.1.4:8080

在1.4命令行查看解锁Jenkins密码

输入密码后,如果出现此界面

安装推荐插件

等待安装完成(很长很长时间)

安装加速神奇,Jenkins默认使用google来搜索插件的下载,而且插件也在国外网站,这里将updates目录中的default.json内的url换为百度(搜索引擎)和清华(下载插件地址),前提必须出现过以上界面才会有updates目录

#cd /var/lib/jenkins/updates/

# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

#sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

 然后需要重启Jenkins

systemctl restart jenkins

此时web页面会显示断开,重新连接登录恢复下载即可

中间需要重新输入解锁Jenkins密码

安装完成后,创建管理用户

配置全局工具

进入全局配置管理

配置环境中的maven,设置系统文件,将路径填写为安装maven后的配置文件路径

配置Java环境,路径同样是安装过Java的环境,版本为1.8

配置Git环境,路径写为Git命令所在路径,命令行执行which git

配置maven安装目录,如果本机没有也可以选择自动安装

搭建Nexus(Maven私服)

192.168.1.6

tar zxf jdk-8u201-linux-x64.tar.gz

mv jdk1.8.0_201/ /usr/local/java

vim /etc/profile

# 文件末尾添加

export JAVA_HOME=/usr/local/java

export JRE_HOME=/usr/local/java/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

rm -rf /usr/bin/java

source /etc/profile

java -version # 验证

 安装Maven

tar zxf apache-maven-3.6.0-bin.tar.gz

mv apache-maven-3.6.0 /usr/local/maven

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile

source /etc/profile

mvn -v # 验证

 安装Nexus

mkdir /usr/local/nexus

tar zxf nexus-3.14.0-04-unix.tar.gz -C /usr/local/nexus/

 启动Nexus

启动较慢,耐心等待

/usr/local/nexus/nexus-3.14.0-04/bin/nexus start

firewall-cmd --add-port=8081/tcp

netstat -anpt | grep 8081

 配置Nexus的仓库

管理用户登录,管理账户admin,默认密码admin123

 

添加代理仓库

地址为aliyun的仓库地址,最下方创建即可

http://maven.aliyun.com/nexus/content/groups/public/

 

为新添加的aliyun仓库设置查找列表,后期使用jar包时就是依次使用各个仓库下载

配置Jenkins和GitLab中Maven使用Nexus私服下载jar包

在Nexus的web界面中仓库私服地址

在192.168.1.4服务器上配置

vim /usr/local/maven/conf/settings.xml

# 添加私服仓库地址

# 添加到之间:

nexus conf

nexusconf

# 这里的地址为Nexus的地址及端口号

http://192.168.1.6:8081/repository/maven-public/

* # 拦截所有jar包下载到私服

 在192.168.1.1服务器上配置

vim /usr/local/maven/conf/settings.xml

# 添加到之间:

nexus conf

nexusconf

http://192.168.1.6:8081/repository/maven-public/

*

 准备项目

192.168.1.4(Jenkins)

安装插件

GitLab/GitLab Hook插件安装

 

Maven/Maven integration插件安装

192.168.1.1(GitLab)

新建项目仓库

这里直接使用管理用户来创建

创建名为kgcapp的项目仓库

在GitLab中添加本机的公钥值

 

在GitLab(1.1)本地的命令行中生成密钥对

[root@gitlab ~]# ssh-keygen

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 identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:N1WUQ0i1zfZ9Z5dA68c8aSzrn3EnCmkT8fSw0cisF98 root@gitlab

The key's randomart image is:

+---[RSA 2048]----+

| ..*=. |

| oo+++ |

| . Xoo.+|

| *.B=o=|

| S = +ooXE|

| . = =.=|

| = ...o|

| . o.. .=|

| ...o |

+----[SHA256]-----+

[root@gitlab ~]# cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuGX4w7NPm8FQ7OBJM7yJszkY1g7leMyfRiYieCJeGhXn

Klzch1b0eqGCfTBulRyUnNwEAC+CQDHoifnjMS4yyrV7oyUi0ezET6h1KZlvsGqnqrncyswFcfNrjxU8tNt

XLtA8Vto9dhii3XU8JdEK42SGLOgsBAJvWsMFJphA4p0aRSG12ACxl+PxrYlKbOezEie5DtMkCKAEXlaUC2

dgsYYsP8eIJcn4ZOnU9gAjqPhkiYDqiAUoL3A9AuBXCY78/rdd1nPDqJh4aBCMUouE/CyGrkBCbX0Qapxwr

e/i9IdubdmXaH/j5m9CKVUuNeKKaJ6sflt6BPDwPAWHlQWPJ root@gitlab

 将公钥值复制到GitLab中

192.168.1.4(Jenkins)

配置邮箱

在最下方找到Jenkins URL的地方,填写自己的邮箱

找到扩展邮箱,smtp为qq的服务器,如果是163则将qq改为163,高级中的密码是邮箱的授权码

邮件通知中的设置和扩展邮箱类似,然后保存

再次进入系统设置中,在最下方找到测试邮件,填写一个邮箱,点击“test configuratioin”即可测试,如果报错,检查以上设置,有可能会因为保存不成功

新建任务并配置

新建任务名为kgcapp

与GitLab中的名称对应,在生产环境中不易被混淆

对kgcapp任务进行配置

描述信息

源码管理

复制GitLab项目的SSH地址

为了访问GitLab添加凭证(红色报错正常,添加正确的凭证就好了

创建凭证,其中的key是GitLab在本地生成的私钥,可以通过私钥与GitLab上的公钥来连接Jenkins和GitLab 

红色报错消失了

构建触发器

选择当gitlab上有新的代码更新时,进行构建

然后进入高级选项

生成一串token值,用来对GitLab中的项目代码进行操作,所以这个值要放到GitLab中,用于验证允许Jenkins来拿取代码,稍后会做

Build

当拿取到代码后,使用mvn clean deploy进行构建代码

Post Steps

构建命令结束后,继续执行一部分shell命令

构建后操作

 

设置收件人邮箱地址,且发送邮件时,携带log文件

设置邮件触发器,当构建成功/失败/不稳定时,都通知收件人和管理员

192.168.1.1(GitLab)

192.168.1.1中设置Jenkins中的token值,用来触发Jenkins构建

GitLab默认情况下不允许通过本地网络触发构建,以下这步是为了设置允许本地网络构建,如果不设置允许会在添加token时报错

设置允许之后,就可以设置GitLab项目与Jenkins的构建触发器连接了

进入项目中选择设置

图中的URL是在Jenkins中的项目路径,这个路径在构建触发器的那里可以看到,复制即可,token则是刚才在Jenkins的管理界面中生成的token值,也是同样的位置,然后点击下方add webhook

add成功后显示下图

生成测试代码

192.168.1.1(GitLab)

生成Java项目,以上这步虽然采用了私库中的阿里云maven库,但还是在生产项目时卡了半天,不知道原因,就等就对了

mvn archetype:generate -DgroupId=cn.kgc.kgcapp -DartifactId=kgcapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

archetype:指定操作类型,generate是产生项目的意思,老版本为create

-DarchetypeArtifactId:表示创建项目框架

maven-archetype-quickstart:代表java项目

maven-archetype-webapp:代表web项目

-DinteractiveMode=false:不采用交互模式,不需要人为操作

 

执行成功后会在当前目录生成名为kgcapp的一个目录,进入目录,生成一个测试的Java项目

cd /root/kgcapp

ls

pom.xml  src  # 可以看到这两个文件即可

修改pom.xml,可以使上传到Nexus(1.6)私服中

cd /root/kgcapp

vim pom.xml

# 倒数第一行上面添加以下,意思为添加本项目的上传仓库位置

nexus

# 快照存储库,按照Maven的目录结构,这个库用于存放开发时的不稳定版

Snapshot Repository

http://192.168.1.1:8081/repository/maven-snapshots/

nexus

# 发布存储库,这个库用于稳定后的版本

Releases Repository

http://192.168.1.1:8081/repository/maven-releases/

 192.168.1.4(Jenkins)

编辑Maven配置文件,加入允许Nexus上传的认证验证信息

必须是在Jenkins中来添加认证,因为在执行构建mvn clean deploy 时,是用的Jenkins本地的maven配置文件,所以需要在Jenkins中配置Nexus的认证

 

vim /usr/local/maven/conf/settings.xml

nexus # 这里的id和pom文件中的一致

admin # 用户密码是Nexus仓库可以登录的,这里会使用管理用户

admin123

192.168.1.1(GitLab)

现在将Java项目上传到GitLab中

 

cd /root/kgcapp

git init

git add .

git config --global user.email "mupeifeiyi@gmail.com"

git config --global user.name "feiyi"

git commit -m "kgcapp"

git remote add origin git@192.168.1.1:root/kgcapp.git

git push -u origin master

 验证

192.168.1.1(GitLab)

在GitLab的web页面中,进入kgcapp项目,可以看到本机上传到仓库的src目录和pom.xml文件

 

192.168.1.4(Jenkins)

Jenkins的web页面中的项目会自动开始运行,直到打包上传到私服中,进入项目查看终端输出

192.168.1.6(Nexus)

查看私服的两个仓库maven-snapshots和maven-releases

因为自己的配置,知道是上传到了maven-releases仓库中

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

查看原文