Jenkins一站成魔【1】传统安装与说明
Jenkins一站成魔【2】传统项目CI/CD
Jenkins一站成魔【3】Docker平台CI/CD
Jenkins一站成魔【4】K8S平台CI/CD
CI/CD 的核心概念是持续集成、持续交付和持续部署。而今天的主角是 Jenkins 。
Jenkins的特征:
1、开源的Java语言开发,支持持续集成,持续部署。
2、易安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可
方便web界面配置管理。
3、消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生
成JUnit/TestNG测试报告。
4、分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
5、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
6、丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 git,svn,maven,
docker等。
名称 | IP地址 | 安装的软件 |
---|---|---|
代码托管服务器 | 192.168.168.151 | Gitlab-12.4.2 |
持续集成服务器 | 192.168.168.152 | Jenkins-2.190.3,JDK1.8,Maven3.6.2,Git,SonarQube |
应用测试服务器 | 192.168.168.153 | JDK1.8,Tomcat8.5 |
主机 192.168.168.151
1. 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix policycoreutils-python
2. 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
# 如果关闭防火墙就不需要做以上配置
systemctl disable firewalld && systemctl stop firewalld
5. 下载gitlab包,并且安装
在线下载安装包:
wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
安装:
rpm -ivh gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
6. 修改gitlab配置
vim /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为8000
external_url 'http://192.168.168.151:8000'
nginx['listen_port'] = 8000
7. 重载配置及启动gitlab
#此处耗时较长 耐心等待哦!
sudo gitlab-ctl reconfigure
gitlab-ctl restart
9. 把端口添加到防火墙
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload
# 如果关闭防火墙就不需要做以上配置
http://192.168.168.151:8000
启动成功后,在页面修改管理员root密码admin123,修改密码后即可登录;
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。
创建用户的时候,可以选择Regular或Admin类型。
创建user成功后,可以使用Edit功能给user一个密码
选择某个用户组,进行Members管理组的成员
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库 Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限 。
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限。
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限 。
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组长可以赋予这个权限
用新用户litaibai/admin123登录到Gitlab,然后在用户组中创建新的项目【 操作同 2) 】
同gitee,github,_ O(∩_∩)O哈哈~
主机 192.168.168.152
为解决plugins不能使用的问题,我没有耐性了,索性一路将jenkins直升2.346.1;
1)安装JDK
rpm -qa | grep java
rpm -e --nodeps java*
yum search jdk
#yum search jdk | grep java-1.8.0
yum list | grep java-11
yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-accessibility.x86_64 java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk-headless.x86_64
# yum install -y java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64 java-11-openjdk-headless.x86_64 java-11-openjdk-jmods.x86_64 java-11-openjdk-static-libs.x86_64
java -version
安装目录为:/usr/lib/jvm
2)获取jenkins安装包
下载页面:https://jenkins.io/zh/download/
下载页面:下载路径:https://mirror.gruenehoelle.nl/jenkins/redhat-stable/
安装文件:jenkins-2.361.1-1.1.noarch.rpm
# rpm安装
#wget --no-check-certificate https://mirror.gruenehoelle.nl/jenkins/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
#wget --no-check-certificate https://mirror.gruenehoelle.nl/jenkins/redhat-stable/jenkins-2.289.2-1.1.noarch.rpm
# wget --no-check-certificate https://mirror.gruenehoelle.nl/jenkins/redhat-stable/jenkins-2.303.1-1.1.noarch.rpm
wget --no-check-certificate https://mirror.gruenehoelle.nl/jenkins/redhat-stable/jenkins-2.346.1-1.1.noarch.rpm
3)把安装包上传到192.168.168.152服务器,进行安装
yum -y install epel-release
yum -y install daemonize
rpm -ivh jenkins-2.346.1-1.1.noarch.rpm
4)修改Jenkins配置
vim /etc/sysconfig/jenkins
修改内容如下:
JENKINS_USER="root"
JENKINS_PORT="8888"
vim /usr/lib/firewalld/services/jenkins.xml
<port protocol="tcp" port="8888"/>
vim /usr/lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8888"
systemctl daemon-reload
5)启动Jenkins
systemctl disable firewalld && systemctl stop firewalld
systemctl start jenkins
6)打开浏览器访问
http://192.168.168.152:8888
账户:admin
密码:cat /var/lib/jenkins/secrets/initialAdminPassword
7)跳过插件安装
因为Jenkins插件需连接默认官网下载,速度非常慢且经常会失败,这里暂时选
【选择插件来安装】>>【无】>>【创建第一个管理员用户】>>【保存并完成】>>【保存并完成】
如 john/admin123
Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用
Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
修改Jenkins插件下载地址
Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins -> Manage Jenkins -> Manage Plugins,点击Available
这样做是为了把Jenkins官方的插件列表下载到本地;
#http://updates.jenkinsci.org/download 修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins
sudo sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' /var/lib/jenkins/updates/default.json
sudo sed -i 's#www.google.com#www.baidu.com#g' /var/lib/jenkins/updates/default.json
最后,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
https://updates.jenkins.io/update-center.json
修改为--->>>
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
find / -name *.UpdateCenter.xml
vim /root/.jenkins/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
此时需要更换插件源,否则插件将安装失败
将 https://updates.jenkins.io/download 改为 http://mirrors.tuna.tsinghua.edu.cn/jenkins
将 https://www.google.com 改为 https://www.baidu.com
sed -i 's/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /root/.jenkins/updates/default.json
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' /root/.jenkins/updates/default.json
Sumbit后,在浏览器输入重启url。
http://192.168.168.152:8888/restart
或
bash /opt/tomcat/bin/shutdown.sh
bash /opt/tomcat/bin/startup.sh
Jenkins -> Manage Jenkins -> Manage Plugins,点击Available,搜索 “Chinese”,安装,重启
我们可以利用 Role-based Authorization Strategy 插件来管理Jenkins用户权限
【系统管理】->【全局安全配置】->【授权策略 “Role-Based Strategy”】->【 保存】
【系统管理】->【Manage and Assign Roles】->【Manage Roles】
Global roles:管理员等高级用户可以创建基于全局的角色 。
Project roles:针对某个或者某些项目的角色 。
Slave roles:节点相关的权限。
我们添加以下三个角色:
michael.*
,意思是只能操作michael开头的项目。michelle.*
,意思是只能操作michelle开头的项目。【系统管理】->【管理用户】->【新建用户】
创建三个用户:michael/admin123、emily/admin123、michelle/admin123
此时直接登录是没有任何权限的哦!!!
【系统管理】->【Manage and Assign Roles】->【Assign Roles】
绑定规则如下:
emily用户 绑定 baseRole 和 role1 角色;
michelle用户 绑定 baseRole 和role2 角色;
以john管理员账户创建两个项目 michael-goods 和 michelle-order ;
以emily用户登录,只能看到michael-goods项目:
以michelle用户登录,只能看到michelle-order项目:
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件;
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
【系统管理】->【插件管理】->【可选插件】->【Credentials Binding】->【安装】
可以添加的凭证有5种:
Username with password
:用户名和密码
SSH Username with private key
: 使用SSH用户和密钥
Secret file
:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径
设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
Secret text
:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
Certificate
:通过上传证书文件的方式
常用的凭证类型有:
Username with password(用户密码)
SSH Username with private key(SSH密钥)
接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。
Git插件安装:
CentOS7上安装Git工具:
# yum安装git
yum install git -y
# 查看git版本
git --version
【系统管理】->【Manage Credentials】->【全局】->【添加一些凭据】
ssh-keygen -t rsa
暂无,不想记录了…
Jdk
和Maven
Jdk
和Maven
需要先操作 “ 4、Maven Install and Configuration ”
【系统管理】->【全局工具配置】->【JDK、Maven】->【应用、保存】
【系统管理】->【Configure System】->【全局属性】->【环境变量】
添加三个变量:JAVA_HOME
、M2_HOME
、PATH+EXTRA
192.168.168.152
在Jenkins集成服务器上安装Maven来编译和打包项目。
上传 apache-maven-3.6.2-bin.tar.gz
到 /opt/
文件夹
# 解压
tar -xzf apache-maven-3.6.2-bin.tar.gz
配置环境变量
# 配置java maven环境变量
cat > /etc/profile.d/myjava.sh <<-EOF
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/apache-maven-3.6.2
export PATH=${PATH}:${JAVA_HOME}/bin:${MAVEN_HOME}/bin
EOF
# 配置生效
source /etc/profile
# 查找Maven版本
mvn -v
# 一定要记得创建仓库路径并赋予权限;不然后面maven构建会不成功的哦!!!
mkdir -p /opt/mavenrepo && chmod -R 777 /opt/mavenrepo
凌波微步 Maven 详细配置 在其他房间 … 如:本地仓库目录,项目编码,国内镜像等。
192.168.168.153
# 安装jdk;此处使用openjdk
rpm -qa | grep java
rpm -e --nodeps java*
yum search jdk | grep java-1.8.0
yum install -y java-1.8.0-openjdk.x86_64 \
java-1.8.0-openjdk-accessibility.x86_64 \
java-1.8.0-openjdk-devel.x86_64 \
java-1.8.0-openjdk-headless.x86_64
# 安装目录为:/usr/lib/jvm
java -version
oracle jdk install 见此处 https://blog.csdn.net/Michael_lcf/article/details/86300662
# 关闭防火墙
systemctl disable firewalld && systemctl stop firewalld
# 安装Tomcat8.5,上传压缩包到 /opt/ 目录
mkdir -p /opt/tomcat
tar -xzvf /opt/apache-tomcat-8.5.47.tar.gz --strip-components 1 -C /opt/tomcat
# 启动tomcat
/opt/tomcat/bin/startup.sh
访问Tomcat:http://192.168.168.153:8080 不出意外,一只可爱的tomcat出现了…
配置Tomcat用户角色权限,默认情况下Tomcat是没有配置用户角色权限的。
vim /opt/tomcat/conf/tomcat-users.xml
<tomcat-users>
...
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-jmx"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-script,manager-gui,admin-gui,admin-script,manager-jmx"/>
tomcat-users>
注意:为了能使配置的用户登录到Tomcat,还需要注释掉以下配置才可以!
vim /opt/tomcat/webapps/manager/META-INF/context.xml
重启Tomcat,访问测试
# 停止
/opt/tomcat/bin/shutdown.sh
# 启动
/opt/tomcat/bin/startup.sh
测试:http://192.168.168.153:8080/manager/html
账号密码:tomcat/tomcat