私有代码管理平台(Gitlab)和自动化部署平台(Jenkins)的搭建

项目本地开发完成后,需要将代码部署到线上服务器。随之微服务、集群等的流行,单靠传统的部署显然是无法满足当下的需求;我们可以通过Gitlab和Jenkins这两个常用的开源项目,便可搭建自己公司的代码管理工具和自动化部署平台

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

Jenkins 是一个开源的持续集成系统,方便开发者利用图形化界面进行项目部署发布等固定操作,通常也会和 Gitlab 配合起来,在 git push 完成后触发设定好的操作,例如将代码部署到某个开发环境中

1 GitLab(私有仓库)的部署

1.1 GitLab的简介

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

1.2 Gitlab的安装

官网:https://about.gitlab.com/install/

(1) 安装:yum install -y gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm

(2)访问gitlab的地址:vim /etc/gitlab/gitlab.rb
在这里插入图片描述(3)重载服务: gitlab-ctl reconfigure

(4) 常用命令

命令功能
gitlab-ctl start启动所有 gitlab 组件
gitlab-ctl stop停止所有 gitlab 组件
gitlab-ctl restart重启所有 gitlab 组件
gitlab-ctl status查看服务状态
gitlab-ctl reconfigure重载服务
gitlab-ctl tail查看日志

1.3 登录gitlab

在浏览器端登陆:http://172.25.12.1,用户root 第一次登录需要强制修改密码
在这里插入图片描述

  • 登录gitlab

在这里插入图片描述

  • 将界面设置为中文模式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.4 Gitlab的使用

(1)新建项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述(2)添加ssh密钥
在这里插入图片描述

  • 查看私钥
[root@server1 ~]#  cd .ssh/
[root@server1 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@server1 .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2/6raP/kBbUqAhPQBtNDNO5Lgsu9hU+92yQTkRIgy8fKPYay
TxDTfb0QDEviw2cN94RmVbwSih2B1X/vFG/vilUsEYa/wflhB3/MuAYZBv5tjUSq
B/9zdY6v2UkbmG75AfE0wcNl7E5K3DIPuPNUl230QKTwxhqLrBvuFCHOCS2mUz4p
prERJ0P8P+Ha91MwhBqjRq+hU7RjR9v/VdE/2999CXPf3boYoF71w9KnhQT1UaMA
o/UnbwPRmjznoF9TQ8OvFARN4hsu6g1lVbmb5q0wlpxLmiIld6ntxPjIPa9+0Dr5
wGV2dpxeErKunKHRuhP3zEffPWZ+Ov4njoyJ8QIDAQABAoIBAGJEXZinRNlv1PXc
l72UvJ52GvCvxVY5CltKwBq6+D9OXP4inp9GqtGtk++KLh6Od+SqFXQScE2VZJtT
bB266krmRKsHf7xLgpXw9ib1QlSnbZP+qdystIw8UjxCtbrfRwchESnD+FEXn8S/
79nzh0Ok78e4ZXx3+w/D4hLIDtp136MGYh83NO6gmi615hvEyaz+K5JZyhEwkaHO
04d/X8/QRL3LqZ6+oyO/7ne6j3Z4qR+Uuq0GfXTQmCCUtcbW6KHqzYV7+2edrzsB
6DWFt2YQ9w2PRurZB9UU7fVKCL0q8NXUG9nHxnRc4bda/oYZKIEr7dh+isRRMl4c
zZyLIGECgYEA70ak9aFDZVGxzkuVeI9MdpXQJMTQ/UYkLB2Vj1ADWFCxv6nfpZwb
3yGoLuBqitQUF3yCzl4Jbz467bqtPPBkjJcvsiDaTfXGRLw4sBXr9IjWJX/gh0Fo
o6gwdXzz251c4vY7irrLbBqsnDgBntzDoadOlv0ENQ6g8pKVx5hJLyUCgYEA618H
PWG+/4HruIhv86VEpT3+cWuX1oU00s3+itT27KPtHBAwUBAMo7U4f21tnGk7KtIw
UeErKzFhAl2NIKkwAKVgjh0b9wqzwVWBbYcuLC/bF1g6945U6qThPvcGAinQU4qe
yYQFq+Caeca2QdBGuEO0OqkQHGbhMO0ZD3qjS90CgYBe8cRBJ1VL3efU+Q79gLcR
kw69mE9pQKzXyIFxFYnOQG7Xo7t3xoMUvhEzUJ9WKSMz0pdA9fV+a84MSPe255iu
ZMtrPjgBmVWsLpe732b6aFW5GY3pfZ3c2r8nz4YgDcgu0w/7U3WmlssJTfvuoqEK
Aw5fQVSrDPv2ZQ4D3jyj9QKBgG+RTuQ4pgmFMw/4lGCAcWaGWUq3/nQwFhbqkAKM
6jLHjUglIFGDGgqrhwlX/IIMm4Azu7XELus9b8doQtI9gER+H6Odhrj2OLim6D/b
uPY3BPou11yq+fNzjlWDUDTMTzSaW6QX0XxkbbTVjWTq7erAJPk9VCayWYIQkTV2
I1t9AoGBALBRJ7cVfhXnmPlXLXya1oxyqxDGwanoDt3g2OUI+xyqCzft6CRpPh0U
ofnbCjl3PbUEJVvtOaumeb9l+QIwPHHUAjmjOujDJ4Ho4ILP8EQeG5K6/HIed166
kqNFU5TsHHzpjxj4r+WGsIX8OQ0bu+rC0QtCSd5gSqrlmNmcs6me
-----END RSA PRIVATE KEY-----

在这里插入图片描述

  • ssh密钥添加成功

在这里插入图片描述(3)克隆gitlab的项目到本地
在这里插入图片描述

git clone git@172.25.12.1:root/test.git

在这里插入图片描述

2 jenkins的部署

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

2.1 Jenkins的安装

(1)软件下载:https://jenkins.io/zh/download/

(2)软件安装(java环境):

yum install jdk-8u171-linux-x64.rpm jenkins-2.279-1.1.noarch.rpm -y

(3)启动服务:systemctl start jenkins

  • 安装apache服务:yum install -y httpd
  • 安装git工具:yum install git -y

(4)更新插件源(解决安装出错问题)

1 编辑文件:cd /var/lib/jenkins/updates

在这里插入图片描述

  • jenkins在下载插件之前会先检查网络连接,其会读取这个文件中的网址。将默认访问谷歌的路径改为www.baidu.com,以及将更新jenkins的源改为清华源
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i.bak 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
  • 将更新的文件放到apache的发布目录:cp default.json /var/www/html/

2 编辑文件:

vim  /var/lib/jenkins/hudson.model.UpdateCenter.xml 
  • 该文件为jenkins下载插件的源地址,改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json,就是因为https的问题,此处将其改为修改后的存放default.json的apache服务的路径,之后重启jenkins服务即可
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://172.25.12.2/default.json</url>
  </site>
</sites>
  • 重启 jenkins服务:systemctl start jenkins

  • 查看服务监听的端口号为8080:netstat -antlp

在这里插入图片描述

2.2 Jenkins的使用

2.2.1 Jenkins的登陆和更新插件

(1)在浏览器端登陆:http://172.25.12.2:8080/

在这里插入图片描述

(2)查看Jenkins初始密码文件

[root@server2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
4194fe7032684e8481eca112d84e8da8

在这里插入图片描述(3)安装插件
在这里插入图片描述

在这里插入图片描述
(4)使用admin账户登陆
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 创建测试工程

在这里插入图片描述

  • 在输入框中输入工程名,选择 构建一个自由风格的软件项目,然后点击左下角的 确定按钮,进入工程配置页面

在这里插入图片描述在这里插入图片描述

  • 查看仓库的URL

在这里插入图片描述

在这里插入图片描述

  • 如果是SSH形式的 URL,选择jenkins凭据的类型

在这里插入图片描述

  • 查看部署GitLab服务虚拟机的私钥

在这里插入图片描述
在这里插入图片描述

  • 选择Credentials用户为root

在这里插入图片描述

2.3 Jenkins构建的两种方式

2.3.1 Jenkins以轮询的方式触发构建

  • 构建触发器为轮询SCM模式,每分钟轮询一次,有更新时触发jinkens构建

在这里插入图片描述

  • 构建时执行shell命令:ls -l,保存配置

在这里插入图片描述

  • Git提交代码到gitlab,jinkens轮询检测到代码仓库的变更,触发构建

查看控制台的输出

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3.2 GitLab 自动触发 Jenkins 构建

(1)安装GitLab插件
在这里插入图片描述在这里插入图片描述(2)配置Demo项目

在这里插入图片描述

  • 构建触发器时选择:Build when a change is pushed to GitLab. GitLab webhook URL: http://172.25.12.2:8080/project/Demo

在这里插入图片描述

  • 点击高级

在这里插入图片描述

  • 生成Secret token

在这里插入图片描述

  • 在GitLab的:管理——>设置——>网络——>外发请求中,打开外法请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 添加WebHook:WebHook就是一个接收HTTP POST(或GET,PUT,DELETE)的URL。一个实现了WebHook的API提供商就是在当事件发生的时候会向这个配置好的URL发送一条信息。与请求-响应式不同,使用WebHooks,可以实时接受到变化

在这里插入图片描述

  • 勾选的Rrigger的条目触发构建

在这里插入图片描述
在这里插入图片描述

  • WebHook添加成功

在这里插入图片描述

  • 构建时执行shell命令:ls -l

在这里插入图片描述测试:有push事件时触发jinkens构建
在这里插入图片描述
在这里插入图片描述

  • jinkens自动检测到代码仓库的变更,触发构建

在这里插入图片描述

  • 查看控制台的输出,成功实现在向 GitLab push 代码时,自动 trigger Jenkins 工程执行构建动作

在这里插入图片描述在这里插入图片描述

jenkins使用

Jenkins自动构建docker镜像,并上传至harbor仓库

server1:构建Dockerfile

[root@server1 test]# cat Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 test]# echo www.baidu.com >> index.html
[root@server1 test]# git add *
[root@server1 test]# git commit -m "update dockfile v1"
[master 727b84c] update dockfile v1
 1 file changed, 3 insertions(+), 1 deletion(-)
[root@server1 test]# git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 284 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@172.25.12.1:root/test.git
   56c5de5..727b84c  master -> master

修改docker.sock权限,不然jenkins无法直接执行docker命令:
chmod 777 /var/run/docker.sock

docker tag nginx:latest localhost:5000/nginx:latest
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
netstat -antlp

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@server1 test]# cat Dockerfile 
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE  80
[root@server1 test]# git commit -a -m "update dockfile v2"
[master 1d3cceb] update dockfile v2
 1 file changed, 1 insertion(+)
[root@server1 test]# git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 368 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.25.12.1:root/test.git
   727b84c..1d3cceb  master -> master
[root@server10 harbor]# cd /etc/docker/
[root@server10 docker]# ls
ca.pem  certs.d  daemon.json  key.json  server-key.pem  server.pem
[root@server10 docker]# scp -r certs.d/   server2:/etc/docker/

在这里插入图片描述

Jenkins使用tls方式连接docker构建主机
生成key和ca证书

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

生成server-key和csr文件(server3为dcker主机名)

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=server3" -sha256 -new -key server-key.pem -out server.csr

可以使用ip地址方式进行tls连接

echo subjectAltName = DNS:server3,IP:172.25.12.3,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out server-cert.pem -extfile extfile.cnf

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210319214617252.png)

@[TOC](私有代码管理平台(Gitlab)和自动化部署平台(Jenkins)的搭建)


项目本地开发完成后,需要将代码部署到线上服务器。随之微服务、集群等的流行,单靠传统的部署显然是无法满足当下的需求;我们可以通过Gitlab和Jenkins这两个常用的开源项目,便可搭建自己公司的代码管理工具和自动化部署平台


 `GitLab`是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。


 `Jenkins` 是一个开源的持续集成系统,方便开发者利用图形化界面进行项目部署发布等固定操作,通常也会和 Gitlab 配合起来,在 git push 完成后触发设定好的操作,例如将代码部署到某个开发环境中
 
# 1 GitLab(私有仓库)的部署

## 1.1 GitLab的简介

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

## 1.2 Gitlab的安装
官网:[https://about.gitlab.com/install/](https://about.gitlab.com/install/)
 
(1) 安装:`yum install -y gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm`

(2)访问gitlab的地址:`vim /etc/gitlab/gitlab.rb`![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312211014196.png)(3)重载服务: `gitlab-ctl  reconfigure`			

(4) 常用命令
|命令|功能  |
|--|--|
|gitlab-ctl start    	|	 启动所有 gitlab 组件|
|gitlab-ctl stop      |  	停止所有 gitlab 组件|
|gitlab-ctl restart       	| 	 重启所有 gitlab 组件|
|gitlab-ctl status    |    		查看服务状态|
|gitlab-ctl reconfigure    | 	 重载服务|
|gitlab-ctl tail        | 查看日志|

## 1.3 登录gitlab
在浏览器端登陆:http://172.25.12.1,用户root 第一次登录需要强制修改密码
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312142831382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)

 - 登录gitlab

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313220736612.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)
 - 将界面设置为中文模式

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143106614.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/2021031214314439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143254675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)


## 1.4 Gitlab的使用

(1)新建项目
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143339143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143440902.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143457301.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/2021031214362965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70)(2)添加ssh密钥
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312143658944.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTgyODgz,size_16,color_FFFFFF,t_70) 

 - 查看私钥

```bash
[root@server1 ~]#  cd .ssh/
[root@server1 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@server1 .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2/6raP/kBbUqAhPQBtNDNO5Lgsu9hU+92yQTkRIgy8fKPYay
TxDTfb0QDEviw2cN94RmVbwSih2B1X/vFG/vilUsEYa/wflhB3/MuAYZBv5tjUSq
B/9zdY6v2UkbmG75AfE0wcNl7E5K3DIPuPNUl230QKTwxhqLrBvuFCHOCS2mUz4p
prERJ0P8P+Ha91MwhBqjRq+hU7RjR9v/VdE/2999CXPf3boYoF71w9KnhQT1UaMA
o/UnbwPRmjznoF9TQ8OvFARN4hsu6g1lVbmb5q0wlpxLmiIld6ntxPjIPa9+0Dr5
wGV2dpxeErKunKHRuhP3zEffPWZ+Ov4njoyJ8QIDAQABAoIBAGJEXZinRNlv1PXc
l72UvJ52GvCvxVY5CltKwBq6+D9OXP4inp9GqtGtk++KLh6Od+SqFXQScE2VZJtT
bB266krmRKsHf7xLgpXw9ib1QlSnbZP+qdystIw8UjxCtbrfRwchESnD+FEXn8S/
79nzh0Ok78e4ZXx3+w/D4hLIDtp136MGYh83NO6gmi615hvEyaz+K5JZyhEwkaHO
04d/X8/QRL3LqZ6+oyO/7ne6j3Z4qR+Uuq0GfXTQmCCUtcbW6KHqzYV7+2edrzsB
6DWFt2YQ9w2PRurZB9UU7fVKCL0q8NXUG9nHxnRc4bda/oYZKIEr7dh+isRRMl4c
zZyLIGECgYEA70ak9aFDZVGxzkuVeI9MdpXQJMTQ/UYkLB2Vj1ADWFCxv6nfpZwb
3yGoLuBqitQUF3yCzl4Jbz467bqtPPBkjJcvsiDaTfXGRLw4sBXr9IjWJX/gh0Fo
o6gwdXzz251c4vY7irrLbBqsnDgBntzDoadOlv0ENQ6g8pKVx5hJLyUCgYEA618H
PWG+/4HruIhv86VEpT3+cWuX1oU00s3+itT27KPtHBAwUBAMo7U4f21tnGk7KtIw
UeErKzFhAl2NIKkwAKVgjh0b9wqzwVWBbYcuLC/bF1g6945U6qThPvcGAinQU4qe
yYQFq+Caeca2QdBGuEO0OqkQHGbhMO0ZD3qjS90CgYBe8cRBJ1VL3efU+Q79gLcR
kw69mE9pQKzXyIFxFYnOQG7Xo7t3xoMUvhEzUJ9WKSMz0pdA9fV+a84MSPe255iu
ZMtrPjgBmVWsLpe732b6aFW5GY3pfZ3c2r8nz4YgDcgu0w/7U3WmlssJTfvuoqEK
Aw5fQVSrDPv2ZQ4D3jyj9QKBgG+RTuQ4pgmFMw/4lGCAcWaGWUq3/nQwFhbqkAKM
6jLHjUglIFGDGgqrhwlX/IIMm4Azu7XELus9b8doQtI9gER+H6Odhrj2OLim6D/b
uPY3BPou11yq+fNzjlWDUDTMTzSaW6QX0XxkbbTVjWTq7erAJPk9VCayWYIQkTV2
I1t9AoGBALBRJ7cVfhXnmPlXLXya1oxyqxDGwanoDt3g2OUI+xyqCzft6CRpPh0U
ofnbCjl3PbUEJVvtOaumeb9l+QIwPHHUAjmjOujDJ4Ho4ILP8EQeG5K6/HIed166
kqNFU5TsHHzpjxj4r+WGsIX8OQ0bu+rC0QtCSd5gSqrlmNmcs6me
-----END RSA PRIVATE KEY-----

在这里插入图片描述

  • ssh密钥添加成功

在这里插入图片描述(3)克隆gitlab的项目到本地
在这里插入图片描述

git clone git@172.25.12.1:root/test.git

在这里插入图片描述

2 jenkins的部署

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

2.1 Jenkins的安装

(1)软件下载:https://jenkins.io/zh/download/

(2)软件安装(java环境):

yum install jdk-8u171-linux-x64.rpm jenkins-2.279-1.1.noarch.rpm -y

(3)启动服务:systemctl start jenkins

  • 安装apache服务:yum install -y httpd
  • 安装git工具:yum install git -y

(4)更新插件源(解决安装出错问题)

1 编辑文件:cd /var/lib/jenkins/updates

在这里插入图片描述

  • jenkins在下载插件之前会先检查网络连接,其会读取这个文件中的网址。将默认访问谷歌的路径改为www.baidu.com,以及将更新jenkins的源改为清华源
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i.bak 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
  • 将更新的文件放到apache的发布目录:cp default.json /var/www/html/

2 编辑文件:

vim  /var/lib/jenkins/hudson.model.UpdateCenter.xml 
  • 该文件为jenkins下载插件的源地址,改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json,就是因为https的问题,此处将其改为修改后的存放default.json的apache服务的路径,之后重启jenkins服务即可
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://172.25.12.2/default.json</url>
  </site>
</sites>
  • 重启 jenkins服务:systemctl start jenkins

  • 查看服务监听的端口号为8080:netstat -antlp

在这里插入图片描述

2.2 Jenkins的使用

2.2.1 Jenkins的登陆和更新插件

(1)在浏览器端登陆:http://172.25.12.2:8080/

在这里插入图片描述

(2)查看Jenkins初始密码文件

[root@server2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
4194fe7032684e8481eca112d84e8da8

在这里插入图片描述(3)安装插件
在这里插入图片描述

在这里插入图片描述
(4)使用admin账户登陆
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 创建测试工程

在这里插入图片描述

  • 在输入框中输入工程名,选择 构建一个自由风格的软件项目,然后点击左下角的 确定按钮,进入工程配置页面

在这里插入图片描述在这里插入图片描述

  • 查看仓库的URL

在这里插入图片描述

在这里插入图片描述

  • 如果是SSH形式的 URL,选择jenkins凭据的类型

在这里插入图片描述

  • 查看部署GitLab服务虚拟机的私钥

在这里插入图片描述
在这里插入图片描述

  • 选择Credentials用户为root

在这里插入图片描述

2.3 Jenkins构建的两种方式

2.3.1 Jenkins以轮询的方式触发构建

  • 构建触发器为轮询SCM模式,每分钟轮询一次,有更新时触发jinkens构建

在这里插入图片描述

  • 构建时执行shell命令:ls -l,保存配置

在这里插入图片描述

  • Git提交代码到gitlab,jinkens轮询检测到代码仓库的变更,触发构建

查看控制台的输出

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3.2 GitLab 自动触发 Jenkins 构建

(1)安装GitLab插件
在这里插入图片描述在这里插入图片描述(2)配置Demo项目

在这里插入图片描述

  • 构建触发器时选择:Build when a change is pushed to GitLab. GitLab webhook URL: http://172.25.12.2:8080/project/Demo

在这里插入图片描述

  • 点击高级

在这里插入图片描述

  • 生成Secret token

在这里插入图片描述

  • 在GitLab的:管理——>设置——>网络——>外发请求中,打开外法请求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 添加WebHook:WebHook就是一个接收HTTP POST(或GET,PUT,DELETE)的URL。一个实现了WebHook的API提供商就是在当事件发生的时候会向这个配置好的URL发送一条信息。与请求-响应式不同,使用WebHooks,可以实时接受到变化

在这里插入图片描述

  • 勾选的Rrigger的条目触发构建

在这里插入图片描述
在这里插入图片描述

  • WebHook添加成功

在这里插入图片描述

  • 构建时执行shell命令:ls -l

在这里插入图片描述测试:有push事件时触发jinkens构建
在这里插入图片描述
在这里插入图片描述

  • jinkens自动检测到代码仓库的变更,触发构建

在这里插入图片描述

  • 查看控制台的输出,成功实现在向 GitLab push 代码时,自动 trigger Jenkins 工程执行构建动作

在这里插入图片描述在这里插入图片描述

jenkins使用

Jenkins自动构建docker镜像,并上传至harbor仓库

server1:构建Dockerfile

[root@server1 test]# cat Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 test]# echo www.baidu.com >> index.html
[root@server1 test]# git add *
[root@server1 test]# git commit -m "update dockfile v1"
[master 727b84c] update dockfile v1
 1 file changed, 3 insertions(+), 1 deletion(-)
[root@server1 test]# git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 284 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@172.25.12.1:root/test.git
   56c5de5..727b84c  master -> master

修改docker.sock权限,不然jenkins无法直接执行docker命令:
chmod 777 /var/run/docker.sock

docker tag nginx:latest localhost:5000/nginx:latest
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
netstat -antlp

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@server1 test]# cat Dockerfile 
FROM nginx
COPY index.html /usr/share/nginx/html
EXPOSE  80
[root@server1 test]# git commit -a -m "update dockfile v2"
[master 1d3cceb] update dockfile v2
 1 file changed, 1 insertion(+)
[root@server1 test]# git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 368 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.25.12.1:root/test.git
   727b84c..1d3cceb  master -> master

server2和server3

[root@server10 harbor]# cd /etc/docker/
[root@server10 docker]# ls
ca.pem  certs.d  daemon.json  key.json  server-key.pem  server.pem
[root@server10 docker]# scp -r certs.d/   server2:/etc/docker/

/etc/hosts

在这里插入图片描述

在这里插入图片描述

Jenkins使用tls方式连接docker构建主机
生成key和ca证书

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

生成server-key和csr文件(server3为dcker主机名)

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=server3" -sha256 -new -key server-key.pem -out server.csr

可以使用ip地址方式进行tls连接

echo subjectAltName = DNS:server3,IP:172.25.12.3,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out server-cert.pem -extfile extfile.cnf


Jenkins使用tls方式连接docker构建主机

安装docker证书:
cp ca.pem server-cert.pem server-key.pem /etc/docker/
cp /usr/lib/systemd/system/docker.service /etc/systemd/system
vim /etc/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376

在这里插入图片描述

systemctl daemon-reload
systemctl restart docker.service
netstat -antlp|grep 2376

Jenkins使用tls方式连接docker构建主机

生成客户端key和证书

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out cert.pem -extfile extfile.cnf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构建

在这里插入图片描述

添加docker交付任务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

docker ps -a | grep webserver && docker rm -f webserver
docker run -d --name webserver -p 80:80 reg.westos.org/library/nginx:latest

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@server1 test]# echo hello world! > index.html 
[root@server1 test]# git commit -a -m "update dockfile v3"
[master 1234205] update dockfile v3
 1 file changed, 1 insertion(+), 3 deletions(-)
[root@server1 test]# git push

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

再次触发

[root@server1 test]# echo www.baidu.com > index.html 
[root@server1 test]# git commit -a -m "update dockfile v4"
[master 06a2dab] update dockfile v4
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 test]# git push

在这里插入图片描述

添加ansible交付任务:
Jenkins服务器提前部署好到目标主机的ssh免密,并安装ansible软件包。

由于是以jenkins用户调用ansible命令,所以需要设置jenkins用户到目标主机的免密。

新建playbook代码仓库
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[root@server2 ~]# cd /var/lib/jenkins/workspace/
[root@server2 workspace]# ls
Demo  Demo@tmp  Docker  playbook  playbook@tmp  Test1
[root@server2 workspace]# cd playbook
[root@server2 playbook]# ls
README.md

usermod -s /bin/bash jenkins

在这里插入图片描述

-bash-4.2$ ssh-copy-id server4
-bash-4.2$ ssh-copy-id server4
-bash-4.2$ id jenkins
uid=998(jenkins) gid=996(jenkins) groups=996(jenkins)

server4和server5

groupadd -g 996 jenkins
useradd -u 998 -g 996 jenkins
echo westos | passwd --stdin jenkins

visudo
在这里插入图片描述

[root@server1 playbook]# cat ansible.cfg
[defaults]
command_warnings=False
remote_user=jenkins

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

在这里插入图片描述
在这里插入图片描述

[root@server1 playbook]# cat playbook.yml
---
- hosts: all
  tasks: 
    - name: install httpd
      yum:
        name: httpd
        state: present
    - name: start httpd
      service:
        name: httpd
        state: started

在这里插入图片描述
在这里插入图片描述

cd $WORKSPACE
ansible-playbook -i inventory/$deploy   playbook.yml
cd $WORKSPACE
ansible-playbook -i inventory/$deploy   playbook.yml

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl run webserver --image=nginx:latest

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@server3 ~]# cd /etc/kubernetes/
[root@server3 kubernetes]# ls
admin.conf  controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf
[root@server3 kubernetes]# scp admin.conf server2:/var/lib/jenkins/.kube/config
[root@server2 ~]# cd /var/lib/jenkins/.kube/
[root@server2 .kube]# ls
config
[root@server2 .kube]# chown jenkins config 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值