1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > jenkins持续集成与持续交付

jenkins持续集成与持续交付

时间:2021-07-29 04:18:42

相关推荐

jenkins持续集成与持续交付

目录

一、jenkins简介1、jenkins2、CI/CD是什么?二、jenkins的部署1、环境准备2、安装jenkins3、更新插件源三、jenkins项目管理配置1、项目创建2、配置周期性检查gitlab变更3、配置实时监控gitlab变更4、自动构建docker镜像并上传到本地仓库5、添加docker交付任务

一、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.rpmhttps://mirrors.tuna./jenkins/redhat/

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

/cn/java/technologies/javase/jdk11-archive-downloads.html

依赖包daemonize下载地址:

/linux/RPM/epel/7/x86_64/Packages/d/daemonize-1.7.7-1.el7.x86_64.html

[root@server6 ~]# wget https://mirrors.tuna./jenkins/redhat/jenkins-2.319-1.1.noarch.rpm --no-check-certificate[root@server6 ~]# lsanaconda-ks.cfg jdk11-archive-downloads.htmldaemonize-1.7.7-1.el7.x86_64.rpm jenkins-2.319-1.1.noarch.rpmjdk-11.0.11_linux-x64_bin.rpmoriginal-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 -antlptcp6 00 :::8080 :::*LISTEN17940/java 浏览器访问ip:端口号#查看jenkins密码将其复制并粘贴到浏览器中的密码框点击继续按钮[root@server6 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword2916f9b1fb7b430f8b149239c8b080a8

浏览器访问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 /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 /gh/lework/jenkins-update-center/speed-test.sh | bashJenkins mirror update center speed test[Mirror Site]ustc: https://mirrors./jenkins/bit : https://mirrors./jenkins/tsinghua: https://mirrors.tuna./jenkins/tencent : https://mirrors./jenkins/aliyun : /jenkins/huawei : /jenkins/[Test]Test File : updates/current/plugin-versions.jsonSite NameIPv4 address File SizeDownload Time Download Speedustc202.141.160.11012M 0.3s37.9MB/sbit 114.247.56.11712M 2.8s4.32MB/stsinghua101.6.15.130tencent 1.82.234.185 12M 8.5s1.41MB/saliyun 219.144.101.23912M 26s 471KB/s huawei 124.70.125.16712M 0.3s39.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-keygenGenerating 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@server6The key's randomart image is:+---[RSA 2048]----+| . oE.. ||o. . o o .||+o. . . .. ||.@ . o + . ||B.BS .. o ||oB... . o ||+oo o .+ o ||o . +.oooo+ || . ....=oo=... |+----[SHA256]-----+[root@server6 .ssh]# cat /root/.ssh/id_rsa.pubssh-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+Aqs8P79ka6+ULY79tZ7aaRHkzs+sWZsHReDXWk8LVH/f4s0XAaK6ivPshHRHfWW3FVXc1hQNhPZZrEbt07hXtJBpgxMLkhxlkLenzNJ/AyavXlfrtEOMJ0QH+r39wpcMD6vaC9XR2+Wrn4kY66+GeK3mUAvtRjHbI716x/1LY1lE4JG2wpLXEq0I1RrDYBJmT1mpDnTHd65+GleiFqiPRtoZm4Gdy0h3EN3fBtH4XKgr8LfyupCBwCKjwZuHxNkcgK7iyGqU7i6P1RCQAr2i8zOmAVUuCssEYf86ZPmkxwIDAQABAoIBADBGnVOmzBUEokSe3+XP432r4k8xXHOL9Nucbw3o0Pp5UYZdbrHxfcCN5ExP8zlMBLXL7CD9AGcnabrDenJlyhrVEdDtf+GODVwhI6J+acLuN54S3rfIJxes1PgBv4eDiqad1tvAVAI8GqdFk6tlMG8ueKq0V4KqmMlmWhx97sMW2NNZqj9JMLYiOouE4rq22qqcwG9nVSliYX63GZgcqCdJRKm/qwiaD8NCtHM78//jDVGSoMpAtjF1YtULqjMram6eVSiaWLISjeOF+JlkymYNqhjFMgJuuoiB55pw8VCBw20DCAgKh5o0heI4uSpbVAr1UwiO4RgcPx4ONk1v1QECgYEA2hPZnzDkjNCb+a7JW0xZ967NXytB4ZL0egZ3es3kesBZhUyjlNdsGq7R3qxbl8lByHXmF6jf+ciXSKWBAwdcJMk6SAeJHKcIofRJOGIMcTZc0N0Zn4LHbHEcVoPita2d7PR3ZF+Pz2liimqeZdmN32zg+EC++Rcjr+oWdNhaI2cCgYEAwp1ne9JdY77JVlLXsgmpg2S9jlTsU0UIiq8pBUyzBetdKrECFST6u1pTXIR+5hrTOsoNbQ8QsVLb6dICClY2SaACLQZST0nEGUhQPGkIOhznSFFHyrfbJyIbfrVsrxYroD6zzeOI8tl3gmanq2FpvEARItyEQ1h1RyFlQJc396ECgYEAr4qe+MeQkdEyXK/Xocg5+2gYJO1bIMr8RGWEM7QcoLrI1MY2Pw+RE4F5qnavW+VDMKvGxXDIqfZP4Mhoqxl3kJzybxyxwACssEFF1z8FqPQLjo0LnRzWjnIWT4XmLjxNDXpTyNYrmtfH3IeqbW3MB/dKuErV7wgzT91sqi2lkS0CgYBo7oXFdX91MIFOUgyKqjsD5WVvQMrLewVIAXmUqe482tK5GgeNbwrhyan40Fe7qesKX7ctfln5wjtgryL6f9F1kRibPjVTGuro1tysNdWBv+PUUj7rRoabawB4KUoYfVO4axZ3hJ9qkWamoML23Oct4T1cFpoZ1bAmUhNN6Dr9AQKBgHLxB+zdkUwij0MxSwjKuyl5b/xe1cBaOHYtglMzN8QYWW0pyEK7B3Lp4LsZcsxfhQ+RgxGsfgGbtEoza/193/xhZgoZ47bKZiueZPPF2GtUBThBXeCv3WRFZUmDDnutIGMFXUP1hK3/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]# lsdemo1 demo@tmp[root@server6 workspace]# cd demo1[root@server6 demo1]# lsREADME.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.Rungit config --global user.email "you@"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@"[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=dockerbaseurl=http://192.168.230.139/docker/20gpgcheck=0[root@server6 yum.repos.d]# yum install docker-ce -y#将harbor仓库所在主机的docker文件发送给jenkins主机[root@server4 ~]# cd /etc/sysctl.d/[root@server4 sysctl.d]# ls99-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]# ls99-sysctl.conf docker.conf[root@server6 sysctl.d]# cat docker.conf net.bridge.bridge-nf-call-iptables = 1net.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]# lscerts.d key.json[root@server4 docker]# scp -r certs.d/ server6:/etc/docker/root@server6's password: redhat-entitlement-authority.crt 100% 26262.1MB/s 00:00 ca.crt100% 21432.5MB/s 00:00

[root@server6 sysctl.d]# cd /etc/docker/[root@server6 docker]# lscerts.d#配置镜像加速器[root@server6 docker]# vim deamon.json[root@server6 docker]# cat deamon.json {"registry-mirrors": [""]}[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/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.230.139 qwe192.168.230.144 server1192.168.230.146 server6192.168.230.147 server4

在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 DockerfileFROM busybox[root@server1 demo1]# git commit -a -m "update Dockerfile"[root@server1 demo1]# git push -u origin main

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。