日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/4/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins与网站代码上线解决方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.1 前言

?

Jenkins是一個(gè)用Java編寫(xiě)的開(kāi)源的持續(xù)集成工具。在與Oracle發(fā)生爭(zhēng)執(zhí)后,項(xiàng)目從Hudson項(xiàng)目獨(dú)立。

Jenkins提供了軟件開(kāi)發(fā)的持續(xù)集成服務(wù)。它運(yùn)行在Servlet容器中(例如Apache Tomcat)。它支持軟件配置管理(SCM)工具(包括AccuRev SCMCVSSubversionGitPerforceClearcaseRTC),可以執(zhí)行基于Apache AntApache Maven的項(xiàng)目,以及任意的Shell腳本和Windows批處理命令。Jenkins的主要開(kāi)發(fā)者是川口耕介。Jenkins是在MIT許可證下發(fā)布的自由軟件。

1.1.1 Jenkins功能

1、持續(xù)的軟件版本發(fā)布/測(cè)試項(xiàng)目。

2、監(jiān)控外部調(diào)用執(zhí)行的工作。

1.2 怎么理解持續(xù)集成、持續(xù)交付、持續(xù)部署呢?

1.2.1 持續(xù)集成

持續(xù)集成(英語(yǔ):Continuous integration,縮寫(xiě)為 CI),一種軟件工程流程,將所有工程師對(duì)于軟件的工作復(fù)本,每天集成數(shù)次到共用主線(mainline)上。

這個(gè)名稱最早由葛來(lái)迪·布區(qū)(Grady Booch)在他的布區(qū)方法中提出,但是他并沒(méi)有提到要每天集成數(shù)次。之后成為極限編程(extreme programming,縮寫(xiě)為XP)的一部分。在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)的作法中,通常還會(huì)搭配自動(dòng)單元測(cè)試。

持續(xù)集成的提出,主要是為了解決軟件進(jìn)行系統(tǒng)集成時(shí)面臨的各項(xiàng)問(wèn)題,極限編程稱這些問(wèn)題為集成地獄(integration hell)。

持續(xù)集成主要是強(qiáng)調(diào)開(kāi)發(fā)人員提交了新代碼之后,立刻進(jìn)行構(gòu)建、(單元)測(cè)試。根據(jù)測(cè)試結(jié)果,我們可以確定新代碼和原有代碼能否正確地集成在一起。簡(jiǎn)單來(lái)講就是:頻繁地(一天多次)將代碼集成到主干。

持續(xù)集成目的在產(chǎn)生以下效益如:

ü?及早發(fā)現(xiàn)集成錯(cuò)誤且由于修訂的內(nèi)容較小所以易于追蹤,這可以節(jié)省項(xiàng)目的時(shí)間與成本。

ü?避免發(fā)布日期的前一分鐘發(fā)生混亂,當(dāng)每個(gè)人都會(huì)嘗試為他們所造成的那一點(diǎn)點(diǎn)不兼容的版本做檢查。

ü?當(dāng)單元測(cè)試失敗或發(fā)生錯(cuò)誤,若開(kāi)發(fā)人員需要在不除錯(cuò)的情況下還原代碼庫(kù)到一個(gè)沒(méi)有問(wèn)題的狀態(tài),只需要放棄一小部分的更改 (因?yàn)榧傻拇螖?shù)頻繁)

ü? "最新" 的程序可保持可用的狀態(tài)供測(cè)試、展示或發(fā)布用。

ü?頻繁的提交代碼會(huì)促使開(kāi)發(fā)人員創(chuàng)建模塊化,低復(fù)雜性的代碼。

ü?防止分支大幅偏離主干。如果不是經(jīng)常集成,主干又在不斷更新,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成。

1.2.2 持續(xù)交付

持續(xù)交付(英語(yǔ):Continuous delivery,縮寫(xiě)為 CD),是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過(guò)程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。

它的目標(biāo)在于讓軟件的建置、測(cè)試與釋出變得更快以及更頻繁。這種方式可以減少軟件開(kāi)發(fā)的成本與時(shí)間,減少風(fēng)險(xiǎn)

持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實(shí)運(yùn)行環(huán)境的「類生產(chǎn)環(huán)境」(production-like environments)中。比如,我們完成單元測(cè)試后,可以把代碼部署到連接數(shù)據(jù)庫(kù)的 Staging 環(huán)境中更多的測(cè)試。如果代碼沒(méi)有問(wèn)題,可以繼續(xù)手動(dòng)部署到生產(chǎn)環(huán)境中。

1.2.3 持續(xù)部署

持續(xù)部署(英語(yǔ):Continuous Deployment,縮寫(xiě)為 CD),是持續(xù)交付的下一步,指的是代碼通過(guò)評(píng)審以后,自動(dòng)部署到生產(chǎn)環(huán)境。

有時(shí)候,持續(xù)部署也與持續(xù)交付混淆。持續(xù)部署意味著所有的變更都會(huì)被自動(dòng)部署到生產(chǎn)環(huán)境中。持續(xù)交付意味著所有的變更都可以被部署到生產(chǎn)環(huán)境中,但是出于業(yè)務(wù)考慮,可以選擇不部署。如果要實(shí)施持續(xù)部署,必須先實(shí)施持續(xù)交付。

持續(xù)部署即在持續(xù)交付的基礎(chǔ)上,把部署到生產(chǎn)環(huán)境的過(guò)程自動(dòng)化。

關(guān)鍵字: CI/CD 持續(xù)集成/持續(xù)交付/持續(xù)部署

1.3 安裝配置JENKINS

了解網(wǎng)Jenkins后,現(xiàn)在進(jìn)行Jenkins的安裝

1.3.1 環(huán)境說(shuō)明

推薦的硬件配置

1 GBRAM

50 GB的驅(qū)動(dòng)器空間

系統(tǒng)環(huán)境

[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 daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)

軟件要求

Java 8--無(wú)論是Java運(yùn)行時(shí)環(huán)境(JRE)還是Java開(kāi)發(fā)工具包(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

軟件下載

官方倉(cāng)庫(kù) https://pkg.jenkins.io/redhat-stable/ 清華大學(xué)開(kāi)源軟件鏡像站 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

???????? 下載相應(yīng)的數(shù)據(jù)包即可,我這里使用的是jenkins-2.73.1-1.1.noarch.rpm

安裝jenkins

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

啟動(dòng)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包安裝的內(nèi)容

[root@Jenkins ~]# rpm -ql jenkins /etc/init.d/jenkins # 啟動(dòng)文件 /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網(wǎng)頁(yè)代碼目錄 /var/lib/jenkins # jenkins 工作目錄 /var/log/jenkins # 日志

配置文件說(shuō)明

[root@Jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins JENKINS_HOME="/var/lib/jenkins" #jenkins工作目錄 JENKINS_JAVA_CMD="" JENKINS_USER="jenkins" # jenkinx啟動(dòng)用戶 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界面安裝

瀏覽器訪問(wèn): http://10.0.0.64:8080

???????? 解鎖Jenkins,密碼從命令行中獲取

?

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

???????? 輸入授權(quán)密碼,然后點(diǎn)擊下一步

???????? 稍等一會(huì)來(lái)導(dǎo)安裝插件選擇的頁(yè)面,將此頁(yè)面關(guān)閉,在安裝完成Jenkins后安裝插件。

???????? 關(guān)閉安裝插件選擇后,選擇開(kāi)始使用Jenkins

安裝完成,顯示界面

安裝Jenkins插件

系統(tǒng)管理 >> 管理插件

???????? 選擇自己需要的插件進(jìn)行安裝即可,也可選擇全部安裝。

1 [root@Jenkins ~]# # 插件安裝完成后插件安裝目錄的內(nèi)容 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 插件安裝完成后插件安裝目錄的內(nèi)容

???????? 至此Jenkins安裝完成

1.3.4 Jenkins配置

1.?配置jenkins并發(fā)執(zhí)行數(shù)量,提高執(zhí)行效率

???????? 系統(tǒng)管理 >> 系統(tǒng)設(shè)置 >> Maven項(xiàng)目配置

2.?設(shè)置郵件,能夠在測(cè)試完成后,主動(dòng)發(fā)郵件告知測(cè)試情況

系統(tǒng)管理 >> 系統(tǒng)設(shè)置 >> Jenkins Location

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

????????????????? 配置完成后點(diǎn)擊 Test configuration 進(jìn)行測(cè)試,測(cè)試成功后,點(diǎn)擊保存

1.4 Jenkins使用

1.4.1 創(chuàng)建一個(gè)新的任務(wù)

創(chuàng)建一個(gè)新的任務(wù)

???????? 輸入項(xiàng)目的名稱,選擇構(gòu)建只有分風(fēng)格的軟件

1.4.2 Jenkinsgitlab聯(lián)合

gitlab的詳細(xì)安裝方法參照: http://www.cnblogs.com/clsn/p/7929958.html

創(chuàng)建公鑰和私鑰

[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

???????? 在首頁(yè)中,點(diǎn)擊項(xiàng)目名稱的下拉監(jiān)聽(tīng)

???????? 選擇源碼管理,先將gitlab的項(xiàng)目地址復(fù)制過(guò)來(lái)

???????? 選擇SSH密鑰和證書(shū),然后選擇直接輸入,將私鑰復(fù)制到下框中即可

???????? 添加完成后,點(diǎn)擊保存

???????? 選擇剛才創(chuàng)建的證書(shū),完成后,選擇構(gòu)建

選擇構(gòu)建

???????? 拉到最底部,選擇使用shell腳本

???????? 腳本內(nèi)容

???????? 創(chuàng)建測(cè)試環(huán)境

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

???????? 選擇構(gòu)建后的操作,讓每次構(gòu)建完成后都將結(jié)果發(fā)送給管理員

1.4.3 測(cè)試手動(dòng)集成

回到主頁(yè),點(diǎn)擊右側(cè)的按鈕進(jìn)行測(cè)試

部署完成

???????? 查看部署日志

查看部署結(jié)果

[root@Jenkins ~]# ll /data/www/ 總用量 4 -rw-r--r-- 1 jenkins jenkins 4 11月 30 21:22 flag -rw-r--r-- 1 jenkins jenkins 0 11月 30 21:22 README.md

1.4.4 自動(dòng)測(cè)試(gitlab主動(dòng)通知Jenkins測(cè)試)

該功能會(huì)使用到一個(gè)插件 gitlab plugin

配置gitlab認(rèn)證

???????? 添加一個(gè)新的憑證

???????? gitlab的設(shè)置中將 token復(fù)制過(guò)來(lái)

???????? 將復(fù)制的token粘貼到api token中,點(diǎn)ok

???????? 在系統(tǒng)配置中找到Gitlab?將信息進(jìn)行填寫(xiě),Credentials 選擇剛剛創(chuàng)建對(duì)的即可

打開(kāi)項(xiàng)目,編輯項(xiàng)目的構(gòu)建觸發(fā)器

gitlab上配置連接jenkins ,將JenkinsSecret token Build URL 復(fù)制到gitlab

???????? 保存之前先進(jìn)程測(cè)試,測(cè)試成功后進(jìn)行保存

???????? gitlab進(jìn)行上傳文件,可以測(cè)試。

在日志中顯示是 Started ?by ?GitLab ?push ?by ?Administrator?即表示自動(dòng)集成成功

1.5 代碼上線方案

1.5.1 早期手動(dòng)部署代碼

純手動(dòng)scp上傳代碼。

純手動(dòng)登陸,Git pull 或者SVN update

純手動(dòng)xftp上傳代碼。

開(kāi)發(fā)發(fā)送壓縮包,rz上傳,解壓部署代碼。

缺點(diǎn):

全程運(yùn)維參與,占用大量時(shí)間。

如果節(jié)點(diǎn)多,上線速度慢。

人為失誤多,目錄管理混亂。

回滾不及時(shí),或者難以回退。

上線方案示意圖:

1.5.2 合理化上線方案

????? 1、開(kāi)發(fā)人員需在個(gè)人電腦搭建LAMP環(huán)境測(cè)試開(kāi)發(fā)好的網(wǎng)站代碼,并且在辦公室或 IDC機(jī)房的測(cè)試環(huán)境測(cè)試通過(guò),最好有專職測(cè)試人員。

2、程序代碼上線要規(guī)定時(shí)間,例如:三天上線一次,如網(wǎng)站需經(jīng)常更新可每天下午 17點(diǎn)上線,這個(gè)看網(wǎng)站業(yè)務(wù)性質(zhì)而定,原則就是影響用戶體驗(yàn)最小。

3、代碼上線之前需備份,網(wǎng)站程序出了問(wèn)題方便回退,另外,從上線技巧上講,上傳代碼時(shí)盡可能先傳到服務(wù)器網(wǎng)站臨時(shí)目錄,傳完整后一步mv過(guò)去,或者通過(guò)In做軟鏈接線上更新代碼的思路。如果嚴(yán)格更新,把應(yīng)用服務(wù)器從集群節(jié)點(diǎn)平滑下線,然后更新。

4、盡量由運(yùn)維人員管理上線,對(duì)于代碼的功能性,開(kāi)發(fā)人員更在意,而對(duì)于代碼的性 能優(yōu)化和上線后服務(wù)器的穩(wěn)定,運(yùn)維更在意服務(wù)器的穩(wěn)定,因此,如果網(wǎng)站宕機(jī)問(wèn)題歸運(yùn)維管,就要讓運(yùn)維上線,這樣更規(guī)范科學(xué)。否則,開(kāi)發(fā)隨意更新,出了問(wèn)題運(yùn)維負(fù)責(zé),這樣就錯(cuò)了,運(yùn)維永遠(yuǎn)無(wú)法抬頭。

圖·web代碼規(guī)范化上線流程圖

1.5.3 大型企業(yè)上線制度和流程

JAVA代碼環(huán)境上線時(shí),有數(shù)臺(tái)機(jī)器同時(shí)需要更新或者分批更新

?

1).本地開(kāi)發(fā)人員取svn代碼。當(dāng)天上線提交到trunk,否則,長(zhǎng)期項(xiàng)目單開(kāi)分支開(kāi)發(fā),然后在合并主線(trunk) 2).辦公內(nèi)網(wǎng)開(kāi)發(fā)測(cè)試時(shí),由開(kāi)發(fā)人員或配置管理員通過(guò)部署平臺(tái)jenkins實(shí)現(xiàn)統(tǒng)一部署,(即在部署平臺(tái)上控制開(kāi)發(fā)機(jī)器從svn取代碼,編譯,打包,發(fā)布到開(kāi)發(fā)機(jī),包名如idc_dep.war). 3).開(kāi)發(fā)人員通知或和測(cè)試人員一起測(cè)試程序,沒(méi)有問(wèn)題后,由配置管理員打上新的tag標(biāo)記。這里要注意,不同環(huán)境的配置文件是隨代碼同時(shí)發(fā)布的。 4).配置管理員,根據(jù)上一步的tag標(biāo)記,checkout出上線代碼,并配置好IDC測(cè)試環(huán)境的所有配置,執(zhí)行編譯,打包(mvn,ant)(php不需要打包),然后發(fā)布到IDC內(nèi)的統(tǒng)一分發(fā)服務(wù)器。 5).配置管理員或SA上線人員,把分發(fā)的程序代碼內(nèi)容推送到相關(guān)測(cè)試服務(wù)器(包名如idc_test.war),然后通知開(kāi)發(fā)及測(cè)試人員進(jìn)行測(cè)試。如果有問(wèn)題向上回退,繼續(xù)修改。 6).如果IDC測(cè)試沒(méi)有問(wèn)題,繼續(xù)打好tag標(biāo)記,此時(shí),配置管理員,根據(jù)上步的tag標(biāo)記,checkout出測(cè)試好的代碼,并配置好IDC正式環(huán)境的所有配置,執(zhí)行編譯,打包(mvn,ant)(php不需要打包),然后發(fā)布到IDC內(nèi)的統(tǒng)一分發(fā)服務(wù)器主機(jī),準(zhǔn)備批量發(fā)布。 7).配置管理員或SA上線人員,把分發(fā)的內(nèi)容推送到相關(guān)正式服務(wù)器(包名如idc_product.war),然后通知開(kāi)發(fā)及測(cè)試人員進(jìn)行測(cè)試。如果有問(wèn)題直接發(fā)布回滾指令。??

?   IDC正式上線的過(guò)程對(duì)于JAVA程序,可以是AB組分組上線的思路,即平滑下線一半的服務(wù)器,然后發(fā)布更新代碼,重啟測(cè)試,無(wú)問(wèn)題后,掛上更新后的服務(wù)器,同時(shí)再平滑下線另一半的服務(wù)器,然后發(fā)布更新代碼測(cè)試(或者直接發(fā)布后,重啟,掛上線)

1.5.4 php程序代碼上線的具體方案

?  對(duì)于PHP上線方法:發(fā)布代碼時(shí)(也需要測(cè)試流程)可以直接發(fā)布到正式線臨時(shí)目錄 ,然后mv或更改link的方式發(fā)布到正式上線目錄 ,不需要重啟http服務(wù)。這是新朗,趕集的上線方案。

1.5.5 JAVA程序代碼上線的具體方案

對(duì)于java上線方法:較大公司需要分組平滑上線(如從負(fù)載均衡器上摘掉一半的服務(wù)器),發(fā)布代碼后,重啟服務(wù)器測(cè)試,沒(méi)問(wèn)題后,掛上上好線的一半,再下另外一半。如果前端有DNS智能解析,上線還可以分地區(qū)上線若干服務(wù)器,逐漸普及到全國(guó)的服務(wù)器,這個(gè)被稱為“灰度發(fā)布”,在后面門戶網(wǎng)站上線的知識(shí)里我們?cè)谥v解。

1.5.6 代碼上線解決方案注意事項(xiàng)

1).上線的流程里,辦公室測(cè)試環(huán)境-->IDC測(cè)試環(huán)境-->正式生產(chǎn)環(huán)境,所有環(huán)境中的所有軟件均應(yīng)版本統(tǒng)一,其次盡量單一,否則將后患無(wú)窮,開(kāi)發(fā)測(cè)試成功,IDC測(cè)試就可能有問(wèn)題(如:操作系統(tǒng),web服務(wù)器,jdk,php,tomcat,resin等版本)2).開(kāi)發(fā)團(tuán)隊(duì)小組辦公內(nèi)部測(cè)試環(huán)境測(cè)試(該測(cè)試環(huán)境屬于開(kāi)發(fā)小組維護(hù),或定時(shí)自動(dòng)更新代碼),代碼有問(wèn)題返回給某開(kāi)發(fā)人員重新開(kāi)發(fā)。3).有專門的測(cè)試工程師,程序有問(wèn)題直接返回給開(kāi)發(fā)人員(此時(shí)返回的一般為程序的BUG,稱為BUG庫(kù)),無(wú)問(wèn)題進(jìn)行IDC測(cè)試4).IDC測(cè)試由測(cè)試人員和運(yùn)維人員參與,叫IDCtest,進(jìn)行程序的壓力測(cè)試,有問(wèn)題直接返回給開(kāi)發(fā)人員,無(wú)問(wèn)題進(jìn)行線上環(huán)境上線。5).數(shù)臺(tái)服務(wù)器代碼分發(fā)上線方案舉例(JAVA程序)A:假設(shè)同業(yè)務(wù)服務(wù)器有6臺(tái),將服務(wù)器分為A,B兩組,A組三臺(tái),B組三臺(tái),先對(duì)A組進(jìn)行從負(fù)載均衡器上平滑下線,B組正常提供服務(wù),避免服務(wù)器因上線影響業(yè)務(wù)。B:下線過(guò)程是通過(guò)腳本將A組服務(wù)器從RS池(LVS,NGINX,HAPROXY,F5等均有平滑方案)中踢出,避免負(fù)裁均衡器將請(qǐng)求發(fā)送給A組服務(wù)器(此時(shí)的時(shí)間應(yīng)該為網(wǎng)站流量少時(shí),一般為晚上)C:將代碼分發(fā)到A組服務(wù)器的站點(diǎn)目錄下,對(duì)A組服務(wù)器上線并重啟服務(wù),并由專業(yè)的測(cè)試人員進(jìn)行訪問(wèn)測(cè)試,測(cè)試成功后,掛上A組的服務(wù)器,同時(shí)下線B組服務(wù)器,B組代碼上線操作測(cè)試等和A組相同,期間也要觀察上線提供服務(wù)的服務(wù)器狀況,有問(wèn)題及時(shí)回滾。 6).特別說(shuō)明:如果是PHP程序,則上線可以簡(jiǎn)單化,直接將上線代碼(最好全量)發(fā)布到所有上線服務(wù)器的特定目錄后,分發(fā)完成后,一次性mv或ln到站點(diǎn)目錄,當(dāng)然測(cè)試也是少不了的。測(cè)試除了人員測(cè)試外,還有各種測(cè)試腳本測(cè)試各個(gè)相關(guān)業(yè)務(wù)接口。 7).大多數(shù)門戶公司的前端頁(yè)面都已經(jīng)靜態(tài)化或者cache了,因此,動(dòng)態(tài)的部分訪問(wèn)平時(shí)就不會(huì)特別多,流量低谷時(shí)就更少了。再加上是平滑上下線,因此基本上

1.6 參考文獻(xiàn)

1.?? https://zh.wikipedia.org/wiki/持續(xù)整合

2.?? https://www.zhihu.com/question/23444990/answer/89426003

3.?? https://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/

4.?? http://t.cn/RYKgMtc?自動(dòng)化部署

5.?? http://www.cnblogs.com/can-H/articles/7346724.html

6.?? https://www.abcdocker.com/abcdocker/2041

?

總結(jié)

以上是生活随笔為你收集整理的Jenkins与网站代码上线解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。