资讯详情

jenkins持续集成与持续交付

目录

  • 一、jenkins简介
    • 1、jenkins
    • 2、CI/CD是什么?
  • 二、jenkins的部署
    • 1、环境准备
    • 2、安装jenkins
    • 3.更新插件源
  • 三、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.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

标签: tys8g集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台