0
点赞
收藏
分享

微信扫一扫

jenkins持续集成与持续交付

m逆光生长 2022-03-23 阅读 88
linux

目录

一、jenkins简介

1、jenkins

JenkinsJenkins是一个用Java编写的开源持续集成工具。它跟踪版本控制系统, 并在发生更改时启动和监视构建系统。可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

  • jenkins的优势
    (1)在开发环境的早期阶段能够很容易的进行错误跟踪
    (2)提供了大量的插件支持
    (3)能够对代码进行迭代改进
    (4)若是迭代失败会在集成阶段进行缓存
    (5)对每个代码进行更改,会生成一个自动生成报告通知
    (6)通过简单的步骤即可自动完成maven发布项目

2、CI/CD是什么?

  • CI
    CI(Continuous integration,持续集成)持续集成指的是频繁的将代码集成到主干上(一天多次),持续集成的目的是让产品可以快速迭代同时还能让产品保持较高质量。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。在代码集成到主干之前必须进行自动化测试,只要有一个测试用例失败就不能够集成。
  • 优点
    (1)提高开发效率
    (2)能快速发现并定位bugs
    (3)能够更快速的发布更新
    在这里插入图片描述
  • CD
  • 持续交付
    CD(Continuous Delivery, 持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中,也就是频繁的将新版本交给质量团队或者用户以供评审,如果通过代码就进入生产阶段。持续交付可以看做是持续集成的下一部步,它强调的是不管怎么更新,软件都是随时可以交付的。持续交付在持续集成的基础上将集成后的代码部署到更加贴近真实运行的环境中。
    在这里插入图片描述
  • 持续部署
    持续部署(continuous deployment)是持续交付的下一步,指代码通过评审后自动部署到生产环境中。
    持续部署的目标是代码在任何时间都是可部署的可以进入生产环境的。
    持续部署的前提是能自动化完成测试、构建、部署等步骤。
    下图是持续部署与持续交付的区别,也就是持续部署在代码检测完成后是部署到生产环境阶段的。
    在这里插入图片描述

二、jenkins的部署

1、环境准备

关闭火墙和selinux的拥有rhel7软件仓库的虚拟机

server1  gitlab仓库(在我的博客git工具的使用中查看如何部署)
server6  jenkins

2、安装jenkins

jenkins下载地址:

#清华镜像源,选择自己所需要的jenkins版本,这里我下载的是jenkins-2.319-1.1.noarch.rpm
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

jdk官网下载地址(需要注册账号并登陆):

https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html

依赖包daemonize下载地址:

http://rpmfind.net/linux/RPM/epel/7/x86_64/Packages/d/daemonize-1.7.7-1.el7.x86_64.html
[root@server6 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.319-1.1.noarch.rpm --no-check-certificate
[root@server6 ~]# ls
anaconda-ks.cfg                   jdk11-archive-downloads.html
daemonize-1.7.7-1.el7.x86_64.rpm  jenkins-2.319-1.1.noarch.rpm
jdk-11.0.11_linux-x64_bin.rpm     original-ks.cfg

在这里插入图片描述

#先安装jdk再安装deamon依赖最后安装jenkins
[root@server6 ~]# rpm -ivh jdk-11.0.11_linux-x64_bin.rpm
[root@server6 ~]# rpm -ivh daemonize-1.7.7-1.el7.x86_64.rpm
[root@server6 ~]# yum install -y jenkins-2.319-1.1.noarch.rpm.
#开启jenkins服务
[root@server6 ~]# systemctl start jenkins
[root@server6 ~]# systemctl status jenkins.service 
#查看端口,jenkins所使用的8080端口处于开放状态
[root@server6 ~]# netstat -antlp
tcp6       0      0 :::8080                 :::*                    LISTEN      17940/java 
浏览器访问ip:端口号
#查看jenkins密码将其复制并粘贴到浏览器中的密码框点击继续按钮
[root@server6 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
2916f9b1fb7b430f8b149239c8b080a8

在这里插入图片描述

在这里插入图片描述

浏览器访问ip:端口号:http://192.168.230.137:8080在这里插入图片描述等待一段时间后进入如下页面
在这里插入图片描述在这里插入图片描述粘贴密码并点击继续按钮

在这里插入图片描述登陆成功点击安装推荐的插件,等待安装完成
在这里插入图片描述在这里插入图片描述
安装完成后进入如下登陆页面,先使用右下角的admin登陆
在这里插入图片描述点击保存完成,开始使用jenkins

在这里插入图片描述

在这里插入图片描述* 修改登陆密码
点击右上角的admin用户–》设置–》password—》修改并保存
在这里插入图片描述在这里插入图片描述在这里插入图片描述

重新登陆jenkins
在这里插入图片描述jenkins安装完成

3、更新插件源

在jenkins管理中找到插件管理
在这里插入图片描述

[root@server6 ~]# mkdir /var/lib/jenkins/update-center-rootCAs
[root@server6 ~]# wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt
[root@server6 ~]# chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs

在这里插入图片描述查找测试那个源的虚度更快,我这里是华为的源更快,所以将华为的url填入升级站点并提交(插件管理的的高级选项)

[root@server6 ~]# curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash
Jenkins mirror update center speed test

[Mirror Site]
ustc          :  https://mirrors.ustc.edu.cn/jenkins/
bit           :  https://mirrors.bit.edu.cn/jenkins/
tsinghua      :  https://mirrors.tuna.tsinghua.edu.cn/jenkins/
tencent       :  https://mirrors.cloud.tencent.com/jenkins/
aliyun        :  https://mirrors.aliyun.com/jenkins/
huawei        :  https://mirrors.huaweicloud.com/jenkins/

[Test]
Test File        : updates/current/plugin-versions.json

Site Name     IPv4 address        File Size     Download Time       Download Speed
ustc          202.141.160.110     12M           0.3s                37.9MB/s      
bit           114.247.56.117      12M           2.8s                4.32MB/s      
tsinghua      101.6.15.130                                                        
tencent       1.82.234.185        12M           8.5s                1.41MB/s      
aliyun        219.144.101.239     12M           26s                 471KB/s       
huawei        124.70.125.167      12M           0.3s                39.0MB/s      

在这里插入图片描述
在这里插入图片描述查看jenkins的镜像源文件,显示已经更改为华为云

[root@server6 ~]# cat /var/lib/jenkins/hudson.model.UpdateCenter.xml

在这里插入图片描述

三、jenkins项目管理配置

1、项目创建

点击新建item,项目名称为project_01,freestyle project,确定
在这里插入图片描述安装gitlab插件,等待安装完成
在这里插入图片描述
在这里插入图片描述

#安装git
[root@server6 ~]# yum install git -y
#创建密钥
[root@server6 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:jUmCobjZOWwYm44WxPjOsOn95Um7dt+i01oWflZGgUw root@server6
The key's randomart image is:
+---[RSA 2048]----+
|    .       oE.. |
|o. . o       o  .|
|+o. . . .      . |
|.@ .   o +    .  |
|B.B     S ..   o |
|oB..      . . o  |
|+oo    o  .+ o   |
|o .   +.oooo+    |
| . ....=oo=...   |
+----[SHA256]-----+
[root@server6 .ssh]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClySE+kPqhu7zx50VVsCzTMAXxj8wgF7jYJljjZhhnlv4Cqzw/v2Rrr5Qtjv21ntppEeTOz6xZmwdF4NdaTwtUf9/izRcBorqK8+yEdEd9ZbcVVdzWFA2E9lmsRu3TuFe0kGmDEwuSHGWQt6fM0n8DJq9eV+u0Q4wnRAf6vf3ClwwPq9oL1dHb5aufiRjrr4Z4reZQC+1GMdsjvXrH/UtjWUTgkbbCktcSrQjVGsNgEmZPWakOdMd3rn4aV6IWqI9G2hmbgZ3LSHcQ3d8G0fhcqCvwt/K6kIHAIqPBm4fE2RyAruLIapTuLo/VEJACvaLzM6YBVS4KywRh/zpk+aTH root@server6
[root@server6 .ssh]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApckhPpD6obu88edFVbAs0zAF8Y/MIBe42CZY42YYZ5b+Aqs8
P79ka6+ULY79tZ7aaRHkzs+sWZsHReDXWk8LVH/f4s0XAaK6ivPshHRHfWW3FVXc
1hQNhPZZrEbt07hXtJBpgxMLkhxlkLenzNJ/AyavXlfrtEOMJ0QH+r39wpcMD6va
C9XR2+Wrn4kY66+GeK3mUAvtRjHbI716x/1LY1lE4JG2wpLXEq0I1RrDYBJmT1mp
DnTHd65+GleiFqiPRtoZm4Gdy0h3EN3fBtH4XKgr8LfyupCBwCKjwZuHxNkcgK7i
yGqU7i6P1RCQAr2i8zOmAVUuCssEYf86ZPmkxwIDAQABAoIBADBGnVOmzBUEokSe
3+XP432r4k8xXHOL9Nucbw3o0Pp5UYZdbrHxfcCN5ExP8zlMBLXL7CD9AGcnabrD
enJlyhrVEdDtf+GODVwhI6J+acLuN54S3rfIJxes1PgBv4eDiqad1tvAVAI8GqdF
k6tlMG8ueKq0V4KqmMlmWhx97sMW2NNZqj9JMLYiOouE4rq22qqcwG9nVSliYX63
GZgcqCdJRKm/qwiaD8NCtHM78//jDVGSoMpAtjF1YtULqjMram6eVSiaWLISjeOF
+JlkymYNqhjFMgJuuoiB55pw8VCBw20DCAgKh5o0heI4uSpbVAr1UwiO4RgcPx4O
Nk1v1QECgYEA2hPZnzDkjNCb+a7JW0xZ967NXytB4ZL0egZ3es3kesBZhUyjlNds
Gq7R3qxbl8lByHXmF6jf+ciXSKWBAwdcJMk6SAeJHKcIofRJOGIMcTZc0N0Zn4LH
bHEcVoPita2d7PR3ZF+Pz2liimqeZdmN32zg+EC++Rcjr+oWdNhaI2cCgYEAwp1n
e9JdY77JVlLXsgmpg2S9jlTsU0UIiq8pBUyzBetdKrECFST6u1pTXIR+5hrTOsoN
bQ8QsVLb6dICClY2SaACLQZST0nEGUhQPGkIOhznSFFHyrfbJyIbfrVsrxYroD6z
zeOI8tl3gmanq2FpvEARItyEQ1h1RyFlQJc396ECgYEAr4qe+MeQkdEyXK/Xocg5
+2gYJO1bIMr8RGWEM7QcoLrI1MY2Pw+RE4F5qnavW+VDMKvGxXDIqfZP4Mhoqxl3
kJzybxyxwACssEFF1z8FqPQLjo0LnRzWjnIWT4XmLjxNDXpTyNYrmtfH3IeqbW3M
B/dKuErV7wgzT91sqi2lkS0CgYBo7oXFdX91MIFOUgyKqjsD5WVvQMrLewVIAXmU
qe482tK5GgeNbwrhyan40Fe7qesKX7ctfln5wjtgryL6f9F1kRibPjVTGuro1tys
NdWBv+PUUj7rRoabawB4KUoYfVO4axZ3hJ9qkWamoML23Oct4T1cFpoZ1bAmUhNN
6Dr9AQKBgHLxB+zdkUwij0MxSwjKuyl5b/xe1cBaOHYtglMzN8QYWW0pyEK7B3Lp
4LsZcsxfhQ+RgxGsfgGbtEoza/193/xhZgoZ47bKZiueZPPF2GtUBThBXeCv3WRF
ZUmDDnutIGMFXUP1hK3/PZ7VmmV/nqRQBSwU8sHnXQIihzE6MJuV
-----END RSA PRIVATE KEY-----

将公钥上传到gitlab
在这里插入图片描述私钥上传到jenkins
配置demo项目,在源码管理里选择git,输入gitlab的ssh克隆地址,点击添加

在这里插入图片描述选择jenkins,在添加评剧类型里选择SSH Username with private key,描述gitlab ssh key,用户root
在这里插入图片描述
选择enter directly,将私有密钥写入key点击添加
在这里插入图片描述Credentials选择root,指定分支与gitlab中分支保持一致
在这里插入图片描述在这里插入图片描述

2、配置周期性检查gitlab变更

构建触发器:轮询,指定多长时间执行一次
在这里插入图片描述构建中选择执行shell,写入要执行的命令,点击保存
在这里插入图片描述

#切换到jenkins的工作目录,可以查看到仓库中的文件
[root@server6 jenkins]# cd
[root@server6 ~]# cd /var/lib/jenkins/workspace/
[root@server6 workspace]# ls
demo1  demo@tmp
[root@server6 workspace]# cd demo1
[root@server6 demo1]# ls
README.md
[root@server6 demo1]# cat README.md
# demo

在这里插入图片描述


[root@server1 demo1]# vim index.html(仅为测试用,内容自己写入就好)
[root@server1 demo1]# git add index.html
[root@server1 demo1]# git commit -m "add index.html"

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@server1.(none)')
[root@server1 demo1]# git config --global user.email "qwe@westos.org"
[root@server1 demo1]# git config --global user.name "qwe"
[root@server1 demo1]# git commit -m "add index.html"
[root@server1 demo1]# git push -u origin main

在这里插入图片描述
在这里插入图片描述在这里插入图片描述查看控制台输出,输出成功
在这里插入图片描述设置完成

3、配置实时监控gitlab变更

在menu–》admin–》设置—》网络–》外发请求–》勾选允许webhook和服务对本地的网络请求并保存
在这里插入图片描述
在jenkins的demo项目配置—构建触发器—build when…—高级—generate—获得token将其复制
在这里插入图片描述
在这里插入图片描述gitlab的demo1项目的设置—webhook
在这里插入图片描述
在这里插入图片描述
点击addwebhook
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在控制台输出中可以查看到改动操作

4、自动构建docker镜像并上传到本地仓库

#编写Dockerfile文件并上传到gitlab
[root@server1 demo1]# vim Dockerfile
[root@server1 demo1]# git add Dockerfile 
[root@server1 demo1]# git commit -m "add Dockerfile"
[root@server1 demo1]# git push -u origin main

在这里插入图片描述查看jenkins同样输出成功
在这里插入图片描述
jenkins实时同步也能查看到Dockerfile文件在这里插入图片描述
给jenkins所在的主机上安装docker

[root@server6 yum.repos.d]# vim docker.repo
[root@server6 yum.repos.d]# cat docker.repo 
[docker]
name=docker
baseurl=http://192.168.230.139/docker/20
gpgcheck=0
[root@server6 yum.repos.d]# yum install docker-ce -y
#将harbor仓库所在主机的docker文件发送给jenkins主机
[root@server4 ~]# cd /etc/sysctl.d/
[root@server4 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server4 sysctl.d]# scp docker.conf server6:/etc/sysctl.d/

[root@server6 yum.repos.d]# cd /etc/sysctl.d/
#修改内核参数并重载
[root@server6 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server6 sysctl.d]# cat docker.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server6 sysctl.d]# sysctl --system

#将harbor主机上的ca证书也共享给jenkins所在主机
[root@server4 sysctl.d]# cd /etc/docker/
[root@server4 docker]# ls
certs.d  key.json
[root@server4 docker]# scp -r certs.d/ server6:/etc/docker/
root@server6's password: 
redhat-entitlement-authority.crt              100% 2626     2.1MB/s   00:00    
ca.crt                                        100% 2143     2.5MB/s   00:00    

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

[root@server6 sysctl.d]# cd /etc/docker/
[root@server6 docker]# ls
certs.d
#配置镜像加速器
[root@server6 docker]# vim deamon.json
[root@server6 docker]# cat deamon.json 
{
	"registry-mirrors": ["https://reg.westos.org"]
}
[root@server6 docker]# systemctl restart docker.service 
[root@server6 docker]# ll /var/run/docker.sock 
srw-rw---- 1 root docker 0 Mar 22 02:03 /var/run/docker.sock
[root@server6 docker]# chmod 777 /var/run/docker.sock 
[root@server6 docker]# vim /etc/hosts
[root@server6 docker]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.230.139 qwe
192.168.230.144 server1
192.168.230.146 server6
192.168.230.147 server4 reg.westos.org

在这里插入图片描述
在harbor仓库中上传nginx镜像
在这里插入图片描述
在这里插入图片描述
jenkins安装docker bulid and publish插件
在这里插入图片描述
在demo1项目的配置构建中选择docker build and publish
在这里插入图片描述
仓库名称为library/demo1,标签动态获取,使用docker套接字,设定仓库地址,添加jenkins平局提供者
在这里插入图片描述
填入如图所示内容在这里插入图片描述在这里插入图片描述
立即构建项目
在这里插入图片描述
成功构建,可以查看到控制台输出
在这里插入图片描述
在harbor仓库中可以看到library/demo1
在这里插入图片描述

5、添加docker交付任务

新建一个名为docker的任务,选择构建自由风格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
遇到的问题:
构建时报错显示docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create?name=busybox”: dial unix /var/run/docker.sock: connect: permission denied.
在这里插入图片描述原因是jenkins用户所在组不是docker,查看docker组的id修改jenkins用户的组,重启jenkins服务再次构建成功在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@server1 demo1]# vim Dockerfile
[root@server1 demo1]# cat Dockerfile
FROM busybox
[root@server1 demo1]# git commit -a -m "update Dockerfile"
[root@server1 demo1]# git push -u origin main

在这里插入图片描述

举报

相关推荐

0 条评论