网站内容发布流程图(Oracle发生争执持续集成()功能介绍及解决办法(一))
优采云 发布时间: 2022-04-04 08:09网站内容发布流程图(Oracle发生争执持续集成()功能介绍及解决办法(一))
1.1 前言
Jenkins 是一个用 Java 编写的开源持续集成工具。在与 Oracle 发生争执后,该项目独立于 Hudson 项目。
Jenkins 为软件开发提供持续集成服务。它在 servlet 容器(例如 Apache Tomcat)中运行。它支持软件配置管理 (SCM) 工具(包括 AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase 和 RTC),可以执行基于 Apache Ant 和 Apache Maven 的项目,以及任意 shell 脚本和 Windows 批处理命令。Jenkins 的主要开发者是 Kosuke Kawaguchi。Jenkins 是在 MIT 许可下发布的免费软件。
1.1.1 詹金斯功能
1、持续的软件发布/测试项目。
2、监控外部调用执行的工作。
1.2 如何理解持续集成、持续交付和持续部署?1.2.1 持续集成
持续集成(英文:Continuous integration,缩写为CI),一个软件工程过程,每天多次将所有工程师的软件工作副本集成到一个共同的主线中。
这个名字最初是由 Grady Booch 在他的构图方法中创造的,但他没有提到一天要集成几次。它后来成为极限编程(简称 XP)的一部分。在测试驱动开发 (TDD) 方法中,通常会结合自动化单元测试。
持续集成的思想主要是解决软件在系统集成中面临的各种问题。极限编程将这些问题称为集成地狱。
持续集成主要强调在开发人员提交新代码后立即构建和(单元)测试。根据测试结果,我们可以确定新代码和原创代码是否正确集成。简单地说:经常(每天多次)将代码集成到主干中。
持续集成旨在产生以下好处,例如:
ü 早期发现集成错误并通过小修改轻松跟踪,从而节省项目时间和成本。
ü 避免在发布日期前一分钟的混乱,当每个人都试图检查他们制作的小不兼容版本时。
ü 当单元测试失败或发生错误时,如果开发者需要在不调试的情况下将代码库恢复到无问题状态,只需丢弃一小部分更改(因为集成次数频繁)。
ü 保持“最新”程序可用于测试、演示或发布。
ü 频繁的代码提交激励开发人员创建模块化、低复杂度的代码。
ü 防止树枝明显偏离树干。如果不经常集成,主干不断更新,以后集成会越来越难,甚至很难集成。
1.2.2 持续交付
持续交付(英文:Continuous Delivery,缩写为CD)是一种软件工程方法,可以让软件产品的生产过程在较短的周期内完成,以确保软件能够稳定、持续地保持在可以发布的状态随时。
它的目标是使软件构建、测试和发布更快、更频繁。这种方法可以降低软件开发的成本和时间,降低风险。
在持续集成的基础上,持续交付将集成的代码部署到更接近真实运行环境的“类生产环境”。例如,在我们完成单元测试后,我们可以将代码部署到连接数据库的 Staging 环境中进行更多测试。如果代码没有问题,可以继续手动部署到生产环境。
1.2.3 持续部署
持续部署(英文:Continuous Deployment,缩写为CD)是持续交付的下一步,是指代码通过审核后自动部署到生产环境。
有时,持续部署也与持续交付相混淆。持续部署意味着所有的更改都会自动部署到生产环境中。持续交付意味着所有变更都可以部署到生产中,但业务考虑可能会选择不部署。要想实现持续部署,就必须先实现持续交付。
持续部署是在持续交付的基础上,将部署到生产环境的过程自动化。
关键词:CI/CD 持续集成/持续交付/持续部署
1.3 安装和配置 JENKINS
了解网络Jenkins后,现在安装Jenkins
1.3.1 环境描述
推荐的硬件配置
1 GB 内存
50 GB 的驱动器空间
系统环境
[root@Jenkins ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@Jenkins ~]# uname -r
3.10.0-693.el7.x86_64
[root@Jenkins ~]# getenforce
Disabled
[root@Jenkins ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
软件要求
Java 8 - Java 运行时环境 (JRE) 或 Java 开发工具包 (JDK) 都可以。
# 可以使用open jdk
[root@Jenkins ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@Jenkins ~]# java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
1.3.2 安装 Jenkins
软件下载
官方仓库 https://pkg.jenkins.io/redhat-stable/
清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
下载对应的数据包就行了,我用的是jenkins-2.73.1-1.1.noarch.rpm
安装詹金斯
rpm -ivh jenkins-2.73.1-1.1.noarch.rpm
启动詹金斯
/etc/init.d/jenkins start
查看端口信息
[root@Jenkins ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1213/sshd
tcp6 0 0 :::8080 :::* LISTEN 1672/java
tcp6 0 0 :::22 :::* LISTEN 1213/sshd
RPM包安装的内容
[root@Jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins # 启动文件
/etc/logrotate.d/jenkins # 日志分割配置文件
/etc/sysconfig/jenkins # jenkins主配置文件
/usr/lib/jenkins # 存放war包目录
/usr/lib/jenkins/jenkins.war # war 包
/usr/sbin/rcjenkins # 命令
/var/cache/jenkins # war包解压目录 jenkins网页代码目录
/var/lib/jenkins # jenkins 工作目录
/var/log/jenkins # 日志
配置文件说明
[root@Jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" #jenkins工作目录
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" # jenkinx启动用户
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080" # 端口
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100" # 最大连接
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
1.3.3 web界面安装
浏览器访问:8080
解锁Jenkins,密码取自命令行
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
3afe5ad49a794ac2b1a72811f5eb3c9b
输入授权密码,点击下一步
稍等片刻,引导安装插件选择页面,关闭此页面,安装Jenkins后安装插件。
关闭安装插件选择后,选择 Start using Jenkins
安装完成,显示界面
安装 Jenkins 插件
系统管理>>管理插件
您可以选择需要安装的插件,也可以选择安装所有插件。
1 [root@Jenkins ~]# # 插件安装完成后插件安装目录的内容
2 [root@Jenkins ~]# ls /var/lib/jenkins/plugins/
3 ace-editor credentials.jpi github-branch-source jquery-detached.jpi pam-auth pipeline-model-extensions.jpi ssh-credentials.jpi workflow-basic-steps.jpi
4 ace-editor.jpi display-url-api github-branch-source.jpi jsch pam-auth.jpi pipeline-rest-api ssh.jpi workflow-cps
5 ant display-url-api.jpi github.jpi jsch.jpi pipeline-build-step pipeline-rest-api.jpi ssh-slaves workflow-cps-global-lib
6 antisamy-markup-formatter docker-commons git.jpi junit pipeline-build-step.jpi pipeline-stage-step ssh-slaves.jpi workflow-cps-global-lib.jpi
7 antisamy-markup-formatter.jpi docker-commons.jpi gitlab-plugin junit.jpi pipeline-github-lib pipeline-stage-step.jpi structs workflow-cps.jpi
8 ant.jpi docker-workflow gitlab-plugin.jpi ldap pipeline-github-lib.jpi pipeline-stage-tags-metadata structs.jpi workflow-durable-task-step
9 authentication-tokens docker-workflow.jpi git-server ldap.jpi pipeline-graph-analysis pipeline-stage-tags-metadata.jpi subversion workflow-durable-task-step.jpi
10 authentication-tokens.jpi durable-task git-server.jpi mailer pipeline-graph-analysis.jpi pipeline-stage-view subversion.jpi workflow-job
11 bouncycastle-api durable-task.jpi gradle mailer.jpi pipeline-input-step pipeline-stage-view.jpi timestamper workflow-job.jpi
12 bouncycastle-api.jpi email-ext gradle.jpi mapdb-api pipeline-input-step.jpi plain-credentials timestamper.jpi workflow-multibranch
13 branch-api email-ext.jpi handlebars mapdb-api.jpi pipeline-milestone-step plain-credentials.jpi token-macro workflow-multibranch.jpi
14 branch-api.jpi external-monitor-job handlebars.jpi matrix-auth pipeline-milestone-step.jpi resource-disposer token-macro.jpi workflow-scm-step
15 build-timeout external-monitor-job.jpi icon-shim matrix-auth.jpi pipeline-model-api resource-disposer.jpi windows-slaves workflow-scm-step.jpi
16 build-timeout.jpi git icon-shim.jpi matrix-project pipeline-model-api.jpi scm-api windows-slaves.jpi workflow-step-api
17 cloudbees-folder git-client jackson2-api matrix-project.jpi pipeline-model-declarative-agent scm-api.jpi workflow-aggregator workflow-step-api.jpi
18 cloudbees-folder.jpi git-client.jpi jackson2-api.jpi maven-plugin pipeline-model-declarative-agent.jpi script-security workflow-aggregator.jpi workflow-support
19 credentials github javadoc maven-plugin.jpi pipeline-model-definition script-security.jpi workflow-api workflow-support.jpi
20 credentials-binding github-api javadoc.jpi momentjs pipeline-model-definition.jpi ssh workflow-api.jpi ws-cleanup
21 credentials-binding.jpi github-api.jpi jquery-detached momentjs.jpi pipeline-model-extensions ssh-credentials workflow-basic-steps ws-cleanup.jpi
至此 Jenkins 安装完成
1.3.4 詹金斯配置
1.配置jenkins并发执行数,提高执行效率
系统管理 >> 系统设置 >> Maven 项目配置
2.设置邮箱,测试完成后可以主动发送邮件通知测试状态
系统管理>>系统设置>>詹金斯位置
向下滚动,找到邮件通知,配置邮件的smtp信息
配置完成后,点击测试配置进行测试。测试成功后点击保存
1.4 Jenkins 使用 1.4.1 创建一个新任务
创建新任务
输入项目名称,选择只构建子样式软件
1.4.2 结合 Jenkins 和 gitlab
gitlab的详细安装方法请参考:
创建公钥和私钥
[root@Jenkins ~]# 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:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 root@Jenkins
The key's randomart image is:
+---[RSA 2048]----+
|==....=* .. |
|...o oo==. |
|+.= . =++.o |
|++ o o.+ . |
|... o S . |
|o.oo o |
| B+ . . . |
|++++ . |
|+Eo. |
+----[SHA256]-----+
[root@Jenkins ~]# cat .ssh/id_rsa.pub
[root@Jenkins ~]# cat .ssh/id_rsa
在gitlab中添加公钥id_rsa.pub
在jenkins中添加私钥id_rsa