实验环境

主机 服务 备注
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环境

拖入jdk包

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

拖入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

拖入GitLab的rpm包

# 安装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位

set_password

使用管理用户登录

first_login

这个页面先不动,先来搭建其他环境

具体想看GitLab的操作,请点击此处

搭建Jenkins/Maven

192.168.1.4

准备Java环境

拖入jdk包

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

拖入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

拖入Jenkins的rpm包

# 安装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

wait_jiemian

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

lock_jenkins

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

shaowait

安装推荐插件

install_chajian

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

wait_install

安装加速神奇,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页面会显示断开,重新连接登录恢复下载即可

jiasudown_plugin

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

rehuifu_install

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

new_shou_admin

shili_config

jenkins_install_success

cd_jiemian

配置全局工具

进入全局配置管理

Global_tool_configure

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

set_jenkins_maven_home

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

set_jenkins_java

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

set_jenkins_java

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

set_jenkins_java

保存

搭建Nexus(Maven私服)

192.168.1.6

准备Java环境

拖入jdk包

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

拖入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

拖入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

Nexus_log

添加代理仓库

proxy_story

create_proxy

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

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

aliyun_story

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

found_list

group

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

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

select_nexus_url

192.168.1.4

vim /usr/local/maven/conf/settings.xml 
# 添加私服仓库地址
# 添加到<mirrors></mirrors>之间:
    <mirror>
        <id>nexus conf</id>
        <name>nexusconf</name>
        # 这里的地址为Nexus的地址及端口号
        <url>http://192.168.1.6:8081/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>   # 拦截所有jar包下载到私服
    </mirror>

192.168.1.1

vim /usr/local/maven/conf/settings.xml 
# 添加到<mirrors></mirrors>之间:
    <mirror>
        <id>nexus conf</id>
        <name>nexusconf</name>
        <url>http://192.168.1.6:8081/repository/maven-public/</url>
        <mirrorOf>*</mirrorOf>
    </mirror>

准备项目

192.168.1.4(Jenkins)

安装插件

Manage_Plugins

GitLab/GitLab Hook插件安装

install_gitlab_plugins

Maven/Maven integration插件安装

maven_jenkins_plugin

192.168.1.1(GitLab)

新建项目仓库

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

admin_create_project

创建名为kgcapp的项目仓库

create_name_kgcapp

在GitLab中添加本机的公钥值

image-20200311131803965

在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中

copy_jenkins_key_gong

192.168.1.4(Jenkins)

配置邮箱

system_config

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

Jenkins_url_email

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

Extended_e-mail_notification

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

e-mail_tongzhi

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

test_configuration

新建任务并配置

新建任务名为kgcapp

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

create_kgcapp_item

对kgcapp任务进行配置

描述信息

jenkins_kgcapp_general

源码管理

复制GitLab项目的SSH地址

copy_kgcapp_sshurl

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

yuanma_manager

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

create_con_gitlab

红色报错消失了

choose_pingzheng_gitlab

构建触发器

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

然后进入高级选项

new_daima_build

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

sheng_token

Build

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

jenkins_maven_clean_d

Post Steps

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

build_post_steps

构建后操作

build_after_cao

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

set_project_list

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

set_tiggers_jenkins

192.168.1.1(GitLab)

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

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

admin_settings_integrations

outbound_requests

allow_webhooks

保存

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

进入项目中选择设置

cd_reops_settings

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

set_token_jenkins

add成功后显示下图

add_webhook_kgcapp

生成测试代码

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
# 倒数第一行上面添加以下,意思为添加本项目的上传仓库位置
  <distributionManagement>
    <snapshotRepository>
      <id>nexus</id>
      # 快照存储库,按照Maven的目录结构,这个库用于存放开发时的不稳定版
      <name>Snapshot Repository</name>
      <url>http://192.168.1.1:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
    <repository>
      <id>nexus</id>
      # 发布存储库,这个库用于稳定后的版本
      <name>Releases Repository</name>
      <url>http://192.168.1.1:8081/repository/maven-releases/</url>
    </repository>
  </distributionManagement>

192.168.1.4(Jenkins)

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

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

vim /usr/local/maven/conf/settings.xml 
    <server>
      <id>nexus</id>   # 这里的id和pom文件中的一致
      <username>admin</username>   # 用户密码是Nexus仓库可以登录的,这里会使用管理用户
      <password>admin123</password>
    </server>

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文件

kgcapp_upload_success

192.168.1.4(Jenkins)

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

remote_gitlab_console_output

upload_success_nexus

192.168.1.6(Nexus)

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

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

maven_releases_deploy

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0