Jenkins与网站代码上线解决方案

Jenkins与网站代码上线解决方案

Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。

Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCMCVSSubversionGitPerforceClearcaseRTC),可以执行基于Apache AntApache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。

1.1.1 Jenkins功能

1、持续的软件版本发布/测试项目。

2、监控外部调用执行的工作。

1.2 怎么理解持续集成、持续交付、持续部署呢? 1.2.1 持续集成

持续集成(英语:Continuous integration,缩写为 CI),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。

这个名称最早由葛来迪·布区(Grady Booch)在他的布区方法中提出,但是他并没有提到要每天集成数次。之后成为极限编程(extreme programming,缩写为XP)的一部分。在测试驱动开发(TDD)的作法中,通常还会搭配自动单元测试。

持续集成的提出,主要是为了解决软件进行系统集成时面临的各项问题,极限编程称这些问题为集成地狱(integration hell)。

Jenkins与网站代码上线解决方案

持续集成主要是强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。简单来讲就是:频繁地(一天多次)将代码集成到主干。

持续集成目的在产生以下效益如:

ü 及早发现集成错误且由于修订的内容较小所以易于追踪,这可以节省项目的时间与成本。

ü 避免发布日期的前一分钟发生混乱,当每个人都会尝试为他们所造成的那一点点不兼容的版本做检查。

ü 当单元测试失败或发生错误,若开发人员需要在不除错的情况下还原代码库到一个没有问题的状态,只需要放弃一小部分的更改 (因为集成的次数频繁)

ü  "最新" 的程序可保持可用的状态供测试、展示或发布用。

ü 频繁的提交代码会促使开发人员创建模块化,低复杂性的代码。

ü 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

1.2.2 持续交付

持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。

它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险

Jenkins与网站代码上线解决方案

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

1.2.3 持续部署

持续部署(英语:Continuous Deployment,缩写为 CD),是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

有时候,持续部署也与持续交付混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

Jenkins与网站代码上线解决方案

持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。

关键字: CI/CD 持续集成/持续交付/持续部署

1.3 安装配置JENKINS

了解网Jenkins后,现在进行Jenkins的安装

1.3.1 环境说明

推荐的硬件配置

1 GBRAM

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

安装jenkins

rpm -ivh jenkins-2.73.1-1.1.noarch.rpm

启动jenkins

/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与网站代码上线解决方案

解锁Jenkins,密码从命令行中获取

[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 3afe5ad49a794ac2b1a72811f5eb3c9b

输入授权密码,然后点击下一步

Jenkins与网站代码上线解决方案

稍等一会来导安装插件选择的页面,将此页面关闭,在安装完成Jenkins后安装插件。

Jenkins与网站代码上线解决方案

关闭安装插件选择后,选择开始使用Jenkins

Jenkins与网站代码上线解决方案

安装完成,显示界面

Jenkins与网站代码上线解决方案

安装Jenkins插件

系统管理 >> 管理插件

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 Jenkins配置

1. 配置jenkins并发执行数量,提高执行效率

Jenkins与网站代码上线解决方案

系统管理 >> 系统设置 >> Maven项目配置

Jenkins与网站代码上线解决方案

2. 设置邮件,能够在测试完成后,主动发邮件告知测试情况

系统管理 >> 系统设置 >> Jenkins Location

Jenkins与网站代码上线解决方案

向下拉,找到邮件通知,配置邮件的smtp信息

配置完成后点击 Test configuration 进行测试,测试成功后,点击保存

Jenkins与网站代码上线解决方案

1.4 Jenkins使用 1.4.1 创建一个新的任务

创建一个新的任务

Jenkins与网站代码上线解决方案

输入项目的名称,选择构建只有分风格的软件

Jenkins与网站代码上线解决方案

1.4.2 Jenkinsgitlab联合

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与网站代码上线解决方案

jenkins中添加私钥id_rsa

在首页中,点击项目名称的下拉监听

Jenkins与网站代码上线解决方案

选择源码管理,先将gitlab的项目地址复制过来

Jenkins与网站代码上线解决方案

选择SSH密钥和证书,然后选择直接输入,将私钥复制到下框中即可

添加完成后,点击保存

Jenkins与网站代码上线解决方案

选择刚才创建的证书,完成后,选择构建

Jenkins与网站代码上线解决方案

选择构建

拉到最底部,选择使用shell脚本

Jenkins与网站代码上线解决方案

脚本内容

Jenkins与网站代码上线解决方案

创建测试环境

[root@Jenkins ~]# mkdir -p /data/www [root@Jenkins ~]# chown -R jenkins.jenkins /data/

选择构建后的操作,让每次构建完成后都将结果发送给管理员

Jenkins与网站代码上线解决方案

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b0cd7117ac86ee68b345e0d7e6228f55.html