ci/cd之jenkins(代码片段)

Tuki_a Tuki_a     2022-12-28     727

关键词:

CI/CD简介

CI(Continuous integration持续集成):持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试
比如写个dockerfile,能不能通过gitlab或者jenkins来实现构建镜像和测试。

CD(Continuous Delivery持续交付) :是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
最后一步最好人工干预一下,否则草率的推到生产环境中是有很大的风险的。

jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

jenkins安装

软件下载:https://jenkins.io/zh/download/
国内镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安装jenkins及java开发环境,还有daemonize依赖项从清华的镜像站下载即可

开启jenkins

jenkins使用8080端口

网页访问http://192.168.122.12:8080,第一次登陆初始化较慢。

根据提示,进入目录,查看初始密码解锁jenkins

需要部署的主机能够上网,暂时不需要安装插件所以可以先离线配置跳过插件安装

先跳过

输入url,和浏览器上方输一样的就可以

开始使用jenkins

进入后界面如下

修改一下root用户密码

设置时区

重新用设置好的密码登录一下

安装jenkins插件

先上传ca证书

mkdir /var/lib/jenkins/update-center-rootCAs

wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt

chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs


按下图操作,管理插件

点击advace可以看到用的官方的更新站点

官方的太慢,我们使用下面的命令测试一下哪个站点比较快

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

清华的比较快,选择清华的站点

可以根据自己的测速换源

将清华的cdn输入后提交

https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/updates/tsinghua/update-center.json

到文件里查看也已经自动更改(也可以直接到文件里改),换源后记得点check now检查一下

安装中文插件

安装中文环境,操作如图

注意装完中文插件后要重启服务才能生效。

安装流水线插件

操作如图

安装gitlab插件

操作如图

回到管理界面会发现提醒我们当前只有一个master,会比较繁忙,应该构建一个分布式环境,设置代理,master只负责调度,给agent布置任务

可以修改master的任务数,按下图操作

改为0就只能调度不能完成任务了,由于硬件限制,我这里就不做代理了

jenkins和gitlab联动

jenkins轮询检查gitlab代码变更

选择new item创建一个自由风格的新任务

到gitlab复制仓库地址

在任务设置里选择git输入仓库地址,添加失败,因为server2主机没有git工具

yum install -y git下载后刷新报了新的错误,因为远程仓库是加密的,需要ssh免密,要提供一个ssh私钥

在jenkins主机做免密

将公钥上传到gitlab

选择添加jenkins,将私钥给jenkins,然后添加即可

注意分支填写要和仓库端的分支名一致

轮询就是隔一段时间到代码仓库看一下有没有更新

查看构建历史,查看控制台输出

输出正常,如果在仓库下创建新的文件,过一会查看就会更新

使用webhook实时检查gitlab代码变更

我们在网上做的工作,大部分其实就是事件,webhooks 已经成为了连接系统的主要方式,不管是用户创建、支付成功、DockerHub 镜像推送或者 Git 仓库上的合并请求,这些都是非常有用并且轻量级的共享信息的方式。
webhook 是应用给其它应用提供实时信息的一种方式。信息一产生,webhook 就会把它发送给已经注册的应用,这就意味着你能实时得到数据。不像传统的 APIs 方式,你需要用轮询的方式来获得尽可能实时的数据。这一点使得 webhook 不管是在发送端还是接收端都非常高效。由于大部分服务提供商对 API 的访问有一定限制,所以要么采用 webhook 方式,要么采用传统的轮询方式,不过这样客户端数据会有一些(或者比较多的)滞后。上面的图是用户发起的一个典型的支付流程的示例。

在gitlab端到管理中心设置

允许外发请求

再到jenkins端取消轮询的方式,改为使用GitLab webhook的方式提供实时信息

选择高级的,产生一个私密token并复制然后保存

到gitlab将token粘贴上去,并将 GitLab webhook URL: http://192.168.122.12:8080/project/demo写入,然后点击添加webhook即可,触发来源我们只选择推送事件

webhook创建成功测试一下

这时到jenkins查看就会有自动化构建的列表出来

在本地仓库修改一下文件推上去验证一下

jenkins这边已经收到状态更改,又构建了列表

实际生产环境中轮询和webhook可以同时使用

推送dockerfile文件自动构建镜像

原理过程阐述:
user写好dockerfile -> git push (dockerfile) -> gitlab -> webhooks实时更新 -> 事件触发tigger -> 触发jenkins -> 调用插件docker plugins -> 构建镜像build images -> 推到harbor镜像仓库push harbor
需要jenkins主机下载好docker并准备好一个镜像,jenkins也要下载好docker的插件;
仓库端写好dockerfile并提交上传到gitlab;
harbor仓库的证书要记得给jenkins。

新增agent节点

前面一直是在master上部署任务,这样当任务多起来的时候master会比较繁忙,所以添加一个agent节点,master节点只负责调度任务,agent来执行任务。

新建一个server3虚拟机作为agent端,安装git和jdk

[root@server3 ~]# rpm -ivh jdk-8u171-linux-x64.rpm
[root@server3 ~]# yum install -y git

jenkins安装agent插件

把master节点的任务数量设为0,这样master端就不能部署任务了,只负责调度

创建新节点

按下图操作添加agent节点的信息,启动方式为ssh

添加ssh证书

输入server3用户名和密码即可

不验证的意思就是在ssh连接的时候不会问你yes or no

agent添加成功

重新构建demo任务

任务会在agent上创建

jenkins用户管理

之前一直使用的root账户,具有所有权限,实际中应该使用普通用户,并且权限进行一定的限制

添加基于角色控制的插件

点击管理用户面板

新建一个普通用户

使用该新建用户身份登录,会发现该用户是有所有权限的

这是因为安全设置里登录用户可以做任何事情

改为基于角色的策略

到面板点击管理和分配角色

管理角色

添加全局角色,users,权限只有读;添加项目角色demo,可以看凭据,可以读写运行任务,对demo开头的项目都生效,最后记得保存

分配角色,最后记得保存

再以lucky用户的身份登录,会发现权限已经少了很多,因为上面我们并没有给全部的权限。现在就可以用普通用户的身份进行操作啦

ci与cd之docker上安装jenkins(代码片段)

一.CI,CD,Jenkins的介绍CI:持续集成(Continuousintegration,简称CI),在传统的软件开发环境中,有集成,但是没有持续集成这种说法,长时间的分支与主干脱离,导致分支与主干可能存在较大偏差,在集成代码的时候可能需要花费数... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置jenkins测试配置用户设置jenkins部署部署测试在测试环境测试在生产环境部署建议演示环境server1 192.168.122.11 gitlab端 4G内存server2 192.168.122.12 j... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置ansible主配置文件编写配置清单编写下载apache的playbook修改apache配置文件最终目录结构如下jenkins测试配置用户设置jenkins部署部署测试在测试环境测... 查看详情

ci与cd之docker上安装jenkins(代码片段)

一.CI,CD,Jenkins的介绍CI:持续集成(Continuousintegration,简称CI),在传统的软件开发环境中,有集成,但是没有持续集成这种说法,长时间的分支与主干脱离,导致分支与主干可能存在较大偏差,在集成代码的时候可能需要花费数... 查看详情

ci/cd之jenkins+gitlab(代码片段)

...lab持续集成环境概述(1)什么是CI/CD(2)Jenkins概述(3)Gitlab概述(4)Gitlab和Github的区别(5)Jenkins配合Gitlab持续集成系统的工作流程二、部署持续集成环境(1)实验环境(2ÿ... 查看详情

jenkins与docker的自动化ci/cd实战(代码片段)

...就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。一、发布流程设计工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜... 查看详情

jenkins与docker的自动化ci/cd实战(代码片段)

...布流程设计工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Jenkins在Docker主机创建容器并发布。环境规划如下:角色IPGit/Registry192.168.56.11Docker19... 查看详情

ci/cd(代码片段)

...审。持续部署:代码通过评审后,自动部署到生产环境。Jenkins  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。主要用于自动化构建、测试和部署软件。  运行jenkins:$java-jarjenkins.war  查看详情

docker与jenkins的自动化ci/cd流水线实战(代码片段)

docker与jenkins的自动化CI/CD流水线实战在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git... 查看详情

ci/cd系列之阿里云云效2020应用篇(代码片段)

...介绍,出于好奇便点进去看了看,刚开始以为云效是类似Jenkins的一套自动化部署方案,了解之后发现云效的野心很大哦,从需求管理、业务开发、代码管理、缺陷测试、部署上线全方位掌控,试图提供一站式DevOps平台,将原先... 查看详情

还在用jenkins?试试gitlab的ci/cd功能吧(代码片段)

...之前,要实现自动化打包部署,一般都需要借助Jenkins。不过,现在Gitlab的CI/CD功能也能实现自动化部署,并且操作更加简单。如果你也正在使用Gitlab作为Git仓库的话,不妨试试它的CI/CD功能。一、安装通过Gitlab... 查看详情

ci/cd1jenkins,actions,daocloud(代码片段)

文章目录1.jenkins2.github新功能actions2.1container2.2services2.3Secrets3.daocloud3.1测试3.2构建3.3发布1.jenkins如下构建/测试/部署就是CICD工具即jenkins,但jenkins需要个人提供一台运行jenkins的机器。官网https://www.jenkins.io/下载jenkinsÿ 查看详情

ci/cd1jenkins,actions(代码片段)

文章目录1.jenkins:构建/测试/部署就是CICD工具即jenkins,但jenkins需要个人提供一台运行jenkins的机器2.GitLab与Jenkins集成:Jenkins镜像像nginx一样2.1Jenkins-docker配置:运行在8080端口上,机器只要安装docker就能装载image... 查看详情

jenkins与docker的自动化ci/cd流水线实战(代码片段)

Jenkins与Docker的自动化CI/CD流水线实战标签(空格分隔):docker的部分一:什么是CI/CD二:发布流程设计三:部署Git仓库并上传测试代码一:什么是CI/CD持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不... 查看详情

jenkins&gitee实现持续集成ci/cd工具免费推荐(代码片段)

文章目录1.Jenkins&Gitee持续集成流程2.Jenkins安装Gitee插件3.插件配置4.安装NodeJS5.新建构建任务5.1General5.2源码管理5.3触发器配置5.4构建环境5.5构建脚本6.Vue项目部署前面介绍了一些CI/CD持续集成的工具,如circleci、travisci、giteego... 查看详情

ci/cd技术专题「jenkins实战系列」jenkins实现自动化部署+自动化合并其他分支(代码片段)

前提概要前面的文章中介绍过了,针对于Jenkins的Window环境的安装以及部署到Linux环境的案例和基本配置,【CI/CD技术专题】「Jenkins实战系列」(1)全流程介绍Jenkins环境搭建+基础部署配置(Windows->Linuxÿ... 查看详情

ci/cd技术专题「jenkins实战系列」总结归纳jenkins的安装使用和配置流程介绍(代码片段)

Jenkins基础介绍篇Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。通过Jenkins实现自动化部署项目,... 查看详情

ci/cd——构建企业级docker+jenkins+git+harbor流水线自动化持续集成持续发布平台(代码片段)

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图GitGithubGitlab的区别前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水... 查看详情