jenkins、git、maven 集成环境部署

1. 部署 jenkins

1.1. 软件环境介绍

软件名称 软件版本 软件下载链接 主机 IP
CentOS CentOS7.6 172.16.150.6
Jenkins 2.235 http://pkg.jenkins.io/redhat
JDK jdk-8u251-linux-x64 Centos7.6 ISO 光盘
Git 1.8.3.1 Centos7.6 ISO 光盘

1.2. 安装 JDK

[root@jenkins ~]# cd /etc/yum.repos.d/ && mkdir bak && mv *.repo bak/

[root@jenkins ~]# cat /etc/yum.repos.d/centos7.repo

[centos]

name=centos76

baseurl=http://172.16.20.10/Linux/centos/7.6.1810/os/x86_64/

enabled=1

gpgcheck=0

[root@jenkins ~]# curl -O http://172.16.20.10/Oracle/JAVA/8/8u251/jdk-8u251-linux-x64.rpm

[root@jenkins ~]# rpm -ivh jdk-8u251-linux-x64.rpm

[root@jenkins ~]# vi /etc/profile

        #####java environment#####

export JAVA_HOME=/usr/java/latest

export CLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

export PATH=JAVA_HOME/bin:PATH

#####java end#####

[root@jenkins ~]# source /etc/profile

1.3. 安装 Git

[root@jenkins ~]# yum install -y Git wget

1.4. 安装 jenkins

[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat/jenkins.repo

[root@jenkins ~]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key

[root@jenkins ~]# yum install -y jenkins

[root@jenkins ~]# systemctl start jenkins && systemctl enable jenkins

1.5. 配置权限

  1. 为了不因为权限出现各种问题,这里直接使用 root。
    [root@jenkins ~]# vi /etc/sysconfig/jenkins

# 修改配置

$JENKINS_USER="root"2. 修改目录权限
[root@jenkins ~]# chown -R root:root /var/lib/jenkins

[root@jenkins ~]# chown -R root:root /var/cache/jenkins

[root@jenkins ~]# chown -R root:root /var/log/jenkins3. 重启 jenkins
[root@jenkins ~]# systemctl restart jenkins

2. 部署 GitLab

2.1. 软件环境介绍

软件名称 软件版本 软件下载链接 主机 IP
CentOS CentOS7.6 172.16.150.26
GitLab gitlab-ce-12.10.3 https://packages.gitlab.com/gitlab/gitlab-ce

2.2. 安装 GitLab

# 安装并配置必要的依赖项

[root@gitlab ~]# yum install -y curl policycoreutils-python openssh-server

[root@gitlab ~]# systemctl enable sshd && systemctl start sshd

# 安装 Postfix 以发送通知电子邮件

[root@gitlab ~]# yum install -y postfix

[root@gitlab ~]# systemctl enable postfix && systemctl start postfix

# 添加 GitLab 软件包存储库并安装软件包

[root@gitlab ~]# curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

[root@gitlab ~]# EXTERNAL_URL="http://172.16.150.26" yum install -y gitlab-ce

# 可以修改配置文件,设置服务端口,默认是 80

[root@gitlab ~]# vi /etc/gitlab/gitlab.rb

#external_url 'http://172.16.150.8:9090'

#gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’

# 重置并启动 GitLab

[root@gitlab ~]# gitlab-ctl reconfigure

[root@gitlab ~]# gitlab-ctl restart

3. 部署 maven

3.1. 软件环境介绍

软件名称 软件版本 软件下载链接 主机 IP
CentOS CentOS7.6 172.16.150.6
Maven 3.6.3 https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
Oracle JDK 1.8.0_251 http://172.16.20.10/Oracle/JAVA/8/8u251/jdk-8u251-linux-x64.tar.gz

3.2. 安装 JDK

参照第 1.2.章节。

3.3. 安装 maven

[root@jenkins ~]# curl -O https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

[root@jenkins ~]# tar -xvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/

[root@jenkins ~]# cd /usr/local/ && ln -s apache-maven-3.6.3/ maven

[root@jenkins ~]# vi /etc/profile

#####maven environment#####

MAVEN_HOME=/usr/local/maven

export PATH={MAVEN_HOME}/bin:/{PATH}

#####maven end#####

[root@jenkins ~]# source /etc/profile

4. (option)部署 Nexus

在本次搭建的过程中,没有部署 Java 的 Nexus 私有服务器,而是使用现有的服务器,服务器地址是 192.168.100.154。如果要实现完整功能,需要自行搭建一个 Nexus 服务器。

4.1. 软件环境介绍

软件名称 软件版本 软件下载链接 主机 IP
CentOS CentOS7.3 192.168.100.154
Nexus nexus-3.9.0 http://172.16.20.10/Nexus/nexus-3.9.0-01.tar.gz
JDK Jdk1.8.0_121 http://172.16.20.10/Oracle/JAVA/8/linux/8u121/jdk-8u121-linux-x64.rpm

5. 配置 jenkins

5.1. 配置用户环境变量

[root@jenkins ~]#** **vi /etc/passwd

            jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

5.2. 访问 jenkins

在浏览器打开输入 http://172.16.150.6:8080/访问 jenkins。

为了安全考虑,需要解锁 jenkins,把/var/lib/jenkins/secrets/initialAdminPassword 文件内容复制到 administrator password 下方即可。

5.3. 安装插件

只需要安装 GitLab plugin,Git plugin,还有 SSH plugin(publish over SSH、ssh)插件即可,其他插件无须安装。

GitLab 和 Git 插件:我们的代码都放在 GitLab 上面,这两个插件用来做源码管理。

SSH 插件:需要使用 jenkins 来执行 shell 命令。

5.4. 创建 admin 用户

5.5. 配置全局参数

5.5.1. 配置 Git 路径

5.6. 配置秘钥

5.6.1. (如果使用默认用户 jenkins 则需要配置)配置 jenkins 用户的秘钥

[root@jenkins ~]#** **su - jenkins

-bash-4.2$ ssh-keygen -t rsa

# 添加公钥到 jenkins 服务器 root 用户,用来执行部署脚本

-bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub root@172.16.150.6

-bash-4.2$ cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDoAshsV1lywNUAdwOtv0dfFGS3/EfZVs88ZFGQKdk1Kl/cZZ1bQjUIz3GyExC5k7Dkj6XxBdn6tSM/IaVO66Mmcj0zxqaS+A9aXqUPrG/YeDAJBKkxcwYcE3wwswu5KtJD6rCB1+sGDGsCz0zjw2kPknhm1r2ZGNiCyzzP72J2WioVVgMK7MFhwuyQWrnokLiY63OFr8NetMrpqWjqF3V2BIQi462B7KAIXKffwoGuFVmdRaRRUXuSDxkk0GJyETJN7uWXg4I44WZ8OQ3qKn41remqd5deT9mcxEKmoV/pqlevUXZNVDt0vUzz7RQPp+nscIrgoHx+aPRLjg0HyCbp jenkins@jenkins

注意:

因为 jenkins 执行部署操作,会出现很多权限问题,一个一个解决比较麻烦(而且不同项目权限问题都不同),就算 sudo 授权也是需要授予最少 10 几条命令的权限,而且不能保证以后不会出现新的命令,所以直接让 jenkins 用户通过 root 方式执行部署操作,简单粗暴。

5.6.2. 配置 root 用户的秘钥

[root@jenkins ~]# ssh-keygen -t rsa

# 添加公钥到 jenkins 服务器 root 用户,用来执行部署脚本

[root@jenkins ~]#ssh-copy-id -i .ssh/id_rsa.pub root@172.16.150.6

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

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCiZXD+EfDoim9BtyDn6LMe155MFV2uHV2wJQlt/1HKDrFXCfW5RhZezKRR4IIDb9jlzO7f18s5bf/fXcoKxVTukxjgfVbxlbJb+3gdPnkX8He+3pTttPfGhvO1JAkxW8y74L7RYK5xuwyYQ9jFxzl9XNvEG6A6gkS6KjGGoAPqDBhwx3eGr9SrFPBuxGpwv/TKWS93VMF1mAUsXPOsn4VrqtHJNQuw8iKfKbvtH25ZFKi77YQrRe+eMVkIk3+OMjZ+agstBUdkL9Ufwk1GcIJk1wJiVmgtny1F1OQEE1QfzvF6241bAi2/mjgJziYm6y8Xuf1FM6ZlpWUlfMdo8V8D root@jenkins

5.7. 构建测试用触发器

5.7.1. 准备测试脚本

[root@jenkins ~]# mkdir -p /shell/deploy/test && vi /shell/deploy/test/jenkins_trigger.sh

#!/bin/bash

echo "scripts has been running"

[root@jenkins ~]# chmod +x /shell/deploy/test/jenkins_trigger.sh

5.7.2. 创建触发器

  1. 创建一个触发构建的项目,选择自由软件风格即可

  1. 源码管理选择 Git,然后只需要在 repository url 中输入 Git 仓库地址即可。

  1. 触发器配置:即 GitLab 有提交操作,则自动部署,这里只需要设置一个认证的 token 即可,GitLab 调用触发器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME 即可。

  1. 构建,选择 execute shell,执行部署脚本即可

  1. 生成 admin 用户的 TOKEN 值

根据触发器验证令牌和用户 id+token 会生成一个下面的 url,只需要访问这个 URL 地址 jenkins 就会自动部署对应项目的代码。

http://admin:11cae314a81a7e7ad0c90572ff93998c7d@172.16.150.6:8080/job/jenkins_trigger/build?token=hehe

5.8. 构建测试用参数触发器

  1. 创建一个参数化触发器
    2) 选择发出器参数
    3) 设置执行部署的脚本
    4) 选择创建的 job 执行

5.8.1. 准备测试脚本

[root@jenkins ~]# cat /shell/deploy/test/jenkins_parameter.sh

#!/bin/bash

git_pro(){

echo "拉取 $1 代码"

}

git_pro $1

[root@jenkins ~]# chmod +x /shell/deploy/test/jenkins_parameter.sh

5.8.2. 创建触发器 1) 创建一个参数化触发器

2) 选择发出器参数
3) 设置执行部署的脚本
4) 选择创建的 job 执行

6. 配置 GitLab

6.1. 创建 project

# 创建一个 jenkins_test 的工程

6.2. 添加 jenkins 公钥

# 添加 jenkins 的公钥到 GitLab 服务器(在第 3.3.1 和第 3.3.2 章节中),用来 clone 代码

秘钥添加完成后,从 jenkins 上进行 GitLab 工程的克隆工作。

-bash-4.2$ Git clone git@172.16.150.8:root/jenkins_test.git

6.3. 配置本地网络

在 GitLab 10.6 版本之后默认是不允许在本地网络中请求 webhook,如果确实需要此服务的话,需要 GitLab 管理员 allow 此操作。

6.4. 创建 webhooks1) GitLab 配置 webhooks,每次提交代码就访问这个 url,执行构建。

2) URL 这里输入上面上面用户 ID+API token+job token 生成的 URL 地址即可。触发工作选择,push event,merge request event 即可。
3) 在 jenkins 全局在 jenkins 全局安全设置中取消勾选“防止跨站点请求伪造,不然 jenkins 会认为 GitLab 的请求不合法。

4) 添加完成测试:点击 test 模拟提交操作,看看是否会执行自动构建。

如果执行成功会返回如下显示,说明执行钩子成功:

Jenkins 查看,可以看到构建也是成功的:

7. 配置 maven

7.1. 配置全局参数

7.1.1. 配置 setting 路径

使用自建的私服,修改/usr/local/maven/conf/setting.xml 配置文件。

[root@jenkins ~]# cd /usr/local/maven/conf

[root@jenkins conf]# mv settings.xml settings.xml.bak

[root@jenkins conf]# vi settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

/Users/jack/.m2/repository

<server>

        <id>snapshots</id>

        <username>geostack</username>

        <password>admin123</password>

</server>

<server>

        <id>releases</id>

        <username>geostack</username>

        <password>admin123</password>

</server>
<mirror>

        <id>alimaven</id>

        <name>aliyun maven</name>

        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

        <mirrorOf>central</mirrorOf>

</mirror>
<profile>

        <id>dev</id>

        <repositories>

                <repository>

                        <id>local-nexus</id>

                        <url>http://192.168.100.154:8081/repository/geostack/</url>

                        <releases>

                                <enabled>true</enabled>

                        </releases>

                        <snapshots>

                                <enabled>true</enabled>

                        </snapshots>

                </repository>

        </repositories>

</profile>
<activeProfile>dev</activeProfile>

7.1.2. Jenkins 安装 maven 插件

7.1.3. 配置 JDK 全局参数

7.1.4. 配置 maven 参数

8. 上传测试代码

8.1. 上传代码并解压

把 zabbix server 的代码上传至 root 根目录下,并解压。

[root@jenkins ~]#tar xvf geostack-zabbix-api.tar.gz

8.2. 建立本地仓库

8.2.1. 删除原有 GitLab 信息

[root@jenkins ~]# cd geostack-zabbix-api && rm -rf target/ .git

8.2.2. 初始化本地仓库及用户

[root@jenkins ~]# Git init

[root@jenkins ~]# Git config --global user.email 54287586@qq.com

[root@jenkins ~]# Git config --global user.name "root"

8.2.3. 将本地项目的所有文件添加到暂存区

[root@jenkins ~]# Git add .

8.2.4. 将暂存区的文件提交到本地仓库并添加信息说明

[root@jenkins ~]# Git commit -m "zabbix test"

8.3. 推送代码到远端仓库

8.3.1. 建立本地仓库和远端 GitLab 仓库的关联关系

[root@jenkins ~]# Git remote add origin http://172.16.150.26/root/jenkins_test.git

8.3.2. 检查关联是否已建立且正确

[root@jenkins ~]# Git remote -v

8.3.3. 获取远程库与本地同步合并

[root@jenkins ~]# Git pull --rebase origin master

8.3.4. 将代码由本地仓库上传到 GitLab 远端仓库

[root@jenkins ~]# Git push -u origin master

9. 配置 maven Job

9.1. 创建 maven 类 job

登陆 jenkins 主页,点击”New Item”,然后选择 job 类型为 maven 项目。

9.2. 配置源码库

在源码库栏中,选择 Git

9.3. 配置 trigger

为 trigger 建立一个 NAME,这个 NAME 会在 GitLab 的远程调用过程中用到。

GitLab 需要配置这个 trigger 名,配置请看 5.4.章节,地址栏填写:

http://admin:11b0f1b5af088a74aff3e809269c4635fd@172.16.150.6:8080/job/jenkins_trigger/build?token=testtrigger

注意:这样,当 GitLab 的 master 主线上发生 push events 和 merge events 时,就触发 webhooks 并同时条用 jenkins 完成 maven 的创建过程。

9.4. 配置 maven 构建过程

在 maven 的构建过程中,主要是通过 pom.xml 文件进行构建。

9.5. Pre 和 Post Steps

9.5.1. Pre Steps

在 jar 包打包执行前,需要执行的脚本放在此处。

9.5.2. Post Steps

当 jar 包打包完成后,需要执行的脚本放在此处。

回帖
请输入回帖内容 ...