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. 配置权限
- 为了不因为权限出现各种问题,这里直接使用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. 创建触发器
- 创建一个触发构建的项目,选择自由软件风格即可
- 源码管理选择git,然后只需要在repository url中输入git仓库地址即可。
- 触发器配置:即gitlab有提交操作,则自动部署,这里只需要设置一个认证的token即可,gitlab调用触发器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可。
- 构建,选择execute shell,执行部署脚本即可
- 生成admin用户的TOKEN值
根据触发器验证令牌和用户id+token会生成一个下面的url,只需要访问这个URL地址jenkins就会自动部署对应项目的代码。
http://admin:11cae314a81a7e7ad0c90572ff93998c7d@172.16.150.6:8080/job/jenkins_trigger/build?token=hehe
5.8. 构建测试用参数触发器
- 创建一个参数化触发器
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.章节,地址栏填写:
注意:这样,当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包打包完成后,需要执行的脚本放在此处。
欢迎来到testingpai.com!
注册 关于