版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、利用Jenkins生成maven項目鏡像及容器導(dǎo)讀:本文根據(jù)天云軟件研發(fā)工程師12月28日在Dockone技術(shù)社區(qū)的分享整理而成,文章結(jié)尾處有社區(qū)問答具體內(nèi)容。以下是分享詳情:一、Jenkins是什么目前持續(xù)集成(CI)已成為當前許多軟件開發(fā)團隊在整個軟件開發(fā)生命周期內(nèi)側(cè)重于保 證代碼質(zhì)量的常見做法。它是一種實踐,旨在緩和和穩(wěn)固軟件的構(gòu)建過程。并且能夠幫助您的開發(fā)團隊應(yīng)對如下挑戰(zhàn):1、 軟件構(gòu)建自動化:配置完成后,ci系統(tǒng)會依照預(yù)先制定的時間表,或者針對某一特 定事件,對目標軟件進行構(gòu)建。2、 構(gòu)建可持續(xù)的自動化檢查:CI系統(tǒng)能持續(xù)地獲取新增或修改后簽入的源代碼,也就是說,當軟件開發(fā)團隊需要周
2、期性的檢查新增或修改后的代碼時,CI系統(tǒng)會不斷確認這些新代碼是否破壞了原有軟件的成功構(gòu)建。這減少了開發(fā)者們在檢查彼此相互依存的代碼中變化情況需要花費的時間和精力。3、構(gòu)建可持續(xù)的自動化測試:構(gòu)建檢查的擴展部分,構(gòu)建后執(zhí)行預(yù)先制定的一套測試 規(guī)則,完成后觸發(fā)通知(Email,RSS等等)給相關(guān)的當事人。4、 生成后后續(xù)過程的自動化:當自動化檢查和測試成功完成,軟件構(gòu)建的周期中可能也 需要一些額外的任務(wù),諸如生成文檔、打包軟件、部署構(gòu)件到一個運行環(huán)境或者軟件倉庫。這樣,構(gòu)件才能更迅速地提供給用戶使用。Jenkins是一個可擴展的持續(xù)集成引擎。主要用于:持續(xù)、自動地構(gòu)建/測試軟件項目以及監(jiān)控一些定時
3、執(zhí)行的任務(wù)。其擁有的特性包括:1、 易于安裝-只要把jenkins.war 部署到servlet容器,不需要數(shù)據(jù)庫支持。2、 易于配置-所有配置都是通過其提供的web界面實現(xiàn)。3、 集成RSS/E-mail通過RSS發(fā)布構(gòu)建結(jié)果或當構(gòu)建完成時通過e-mail通知。4、生成JUnit/TestNG 測試報告。5、分布式構(gòu)建支持 Jenkins能夠讓多臺計算機一起構(gòu)建 /測試。6、 文件識別:Jenkins能夠跟蹤哪次構(gòu)建生成哪些jar,哪次構(gòu)建使用哪個版本的 jar 等。7、插件支持:支持擴展插件,你可以開發(fā)適合自己團隊使用的工具。CI系統(tǒng)基本結(jié)構(gòu)圖該系統(tǒng)的各個組成部分是按如下順序來發(fā)揮作用的:
4、1. 開發(fā)者檢入代碼到源代碼倉庫。2. CI系統(tǒng)會為每一個項目創(chuàng)建了一個單獨的工作區(qū)。當預(yù)設(shè)或請求一次新的構(gòu)建時,它將把源代碼倉庫的源碼存放到對應(yīng)的工作區(qū)。3. CI系統(tǒng)會在對應(yīng)的工作區(qū)內(nèi)執(zhí)行構(gòu)建過程。4. (配置如果存在)構(gòu)建完成后,CI系統(tǒng)會在一個新的構(gòu)件中執(zhí)行定義的一套測試。完成后觸發(fā)通知(Email,RSS等等)給相關(guān)的當事人。5. (配置如果存在)如果構(gòu)建成功,這個構(gòu)件會被打包并轉(zhuǎn)移到一個部署目標(如應(yīng)用服務(wù)器)或存儲為軟件倉庫中的一個新版本。 軟件倉庫可以是 CI系統(tǒng)的一部分,也可以是 一個外部的倉庫,諸如一個文件服務(wù)器或者像J、 SourceForge之類的網(wǎng)站。6. CI系統(tǒng)通
5、常會根據(jù)請求發(fā)起相應(yīng)的操作,諸如即時構(gòu)建、生成報告,或者檢索一 些構(gòu)建好的構(gòu)件。、Jenkins的安裝與部署1、下載yum源:sudo wget -O /etc/yum.repos.d/je nkin s.repo https:/pkg.je nkin s.io/redhat-stable/je nkin s.repo2、導(dǎo)入密鑰:sudo rpm -import https:/pkg.je nkin s.io/redhat-stable/je nkin s.io.key3、安裝 Jenkins : yum in stall jenkins4、 啟動前檢查是否安裝jdk : java -ver
6、sion (最好是1.8以上的)5、 修改配置文件:sudo vim /etc/i nit.d/je nkins在 candidates="路徑后添加 java 路徑 /usr/java/jdk1.8.0_144/bin/java.(根據(jù)個人Java安裝地址)candidates=Hvi /etc/sysc on fig/je nkins找到JENKINS_PORT=8080” (8080是Jenkins默認端口,若被占用課修改為其他空閑端口)Port Jenkins Set to -1 to15 Listening on.disableJENKINS PORT=I,8090H# T
7、ype:string也4 11 116、關(guān)閉防火墻7、 啟動應(yīng)用:sudo service jenkins start三、Jenkins構(gòu)建maven項目1、插件安裝啟動Jenkins服務(wù)以后便可登錄瀏覽器訪問,因為我們需要從git上拉取源碼,所以要在Jenkins上安裝相應(yīng)的git插件,同時我們也需要安裝 maven類的插件來支持構(gòu)建 maven 項目。越 JenkinsJenkins新建藉建臥列IS陸列中盪肓梅建任倚1空閑2主閑點擊系統(tǒng)管理恒砒川母Jenkins用戸管理Jenkin冒jgmliLli!詡歷姦附邛阿炬審 如諒oetl UUl悅朗汗蠢This JokirtG inInnGo i
8、ike dRprfiGflrt-RcI prctocols; JHI PcannftdiJHI P?c-Q4iHiRGt. H r iijipfKrftedi by filll sistern coinpourBnits |a(|eril5- CLI and tMheio cIImIs), ft Is htyhil屮 ru Cofillguird 砒 anCderit 訪隊列中左埜肯壬i三尋點擊管理插件(下圖換為 Jenkins5 和 Jenkins6 )銀夏成上一個盤*二D來hiL1_山詣二 &_丄里Sficufg匕曲齡費 define-曲is diovwfd lol輸-.yatri
9、tiJ|fc OcgUB Cr*M|l* CungurFi thfi trpdprrlial prcvid咋 and l>!p?EdEFalE.Cofif»guf£ t£bl£ 1hfef IcotiCNig and 占ut血謝lie 覚引*怙円玄匸ih' Artpwi(的說二亍巴奔aft:j:葉旳申護m爪可于蘭側(cè)t jt« sitM. BML 卿電直咱Jenkim功社擴聲件.|可用坦站EKNErOffmswCEPliTNl 也)鼻 申I lefalSta L Etti E'fifld 昶% i=m “ Optfl ULL
10、aBj-i fU12 亡乂piddm)1El12?在可選插件中找到 Git plugin和Maven Integration plugin插件并安裝插件安裝完畢后重啟Jenkins2、新建maven項目新建一個job(下圖換為Jenkins7 )AJenkinsF沁屯用尸歡迎便用Jenkins!:任務(wù)歷史X系統(tǒng)青理|開方創(chuàng)建Yififi*坍 credentais列=駅列中設(shè)育構(gòu)建任勢構(gòu)律IX行棟左=1空閑2空閑輸入名稱和項目類型Item名稱JavaWeb構(gòu)建一個自由鳳胳的軟件除目說曇Jenkins瓏年功Jenkins將會結(jié)合任何3C血和任何枸建系魏來, 枸肆一牛m第陽n顧目構(gòu)建一竹怕摒門誡目J
11、enkiinsfij用你的POM交件這樣可以大犬減輕構(gòu)*E xternal Job這*塑型的在務(wù)允詐你記錄撫行在外部旳冷“的住勞.任務(wù)甚至運行T掏理一個參配蓋頃目話用于參罰置I頁目.例如參環(huán)境測試平臺指定枸建.等等.源碼管理在源碼管理項中選擇 git并輸入git地址并在Credentials中Add倉庫登錄賬號密碼,在下方分支選擇中選擇需要構(gòu)建的項目分支Bi anch SpKifiw (U aok T訓(xùn)卉'VraEtofAdd deposit?ry構(gòu)建觸發(fā)器根據(jù)實際要求構(gòu)建符合要求的觸發(fā)器,此圖中觸發(fā)器 Poll SCM的功能是每個一定時間便檢查源碼是否有更新,若有則自動構(gòu)建。(*/6
12、0*含義是每隔60分鐘檢查一次git源碼)呵謝垢 Prt Stftn 和d Pas:懾注 惶后師構(gòu)建融發(fā)器門別此'.nep?-.?r 3 2 'IAPSHOT dexnenc>- i, bu:I 1 Suita at *r rrh* pacTS art t >ilt! I rjik: :epac :3iyLI jlt-u: -3C- trggr fo, GTScr pc incEl 如 SCM二匕手悶'T-. Spioad load evilly t)t using 'WGOT" *' HLhui dun '.'
13、39;60 * *'Would Iasi htu& mn al Tie May. SiplwMwr 1? 201710:00:26 AM CS-1; woiMd 皓Kt nin st Tuesday12” 20171T DQ 2G AM CSTgnon poat convnit hooks構(gòu)建選項第一行選項是默認的 pom文件在git的root目錄下,如果pom文件在其他路徑下, 則需要輸入 相應(yīng)的路徑/pom.xml ;第二行執(zhí)行的 maven命令BuildRuotPOMckdir mslallGoa b a d諷“此時maven項目構(gòu)建基本就完成,進入將maven項目生成d
14、ocker鏡像的步驟。四、Docker鏡像構(gòu)建1、docker 配置在 Jenkins 中安裝相應(yīng)的 docker 插件(docker-build-step)在Host服務(wù)器上安裝docker( 1.12.6版本慎用)配置docker的遠程訪問:1、centos 下修改 docker 的配置文件 /usr/lib/systemd/system/docker.service2、 在Service的部分添加(此處是暴露的6732端口)ExecStart=ExecStart=/usr/bi n/dockerd -H tcp:/:6732 -H un ix:/var/ru n/docke
15、r.sockServiceType=noti幵找 th default not to use systend for cgrg? because the delegate issue? stil' 吐tw and systmd currently Tqqs met support tie cgroup festvre set recuird北 tor cantine rs run by dazkerEx&cS t a r±-/ lie r/b Ln/doc<erdFx&cReload=/bin/kilI -s HUP HATkPTD# Having no
16、n-? eno I lint*; causes ppr-fcrntqnre probl pns due to me counting 07erresri# in the kernel. We recomend using eg roups to do container-! Deal accounting, LimitNOFlLE=irif initLi mit npr-X=infinilyLi mj-t CORE-in ':丄 naty# UncDmnent Tasks Max 丄f yajr systemd wersion seppo rt5 it.# Only 5 /sternd
17、 226 and abae support th丄5 ve r5 ion.#T 酩 k a Ma K=infi mt yTifflftOutStartSecGX電 &t> thatnotths <5roups 0+ docker eontainsrsCl&ga 七wya# kill only the docker pro亡屯not allin rh& rgroupKiU«ode=prD«w# 1 粘LdiL the uutkHr praters if it ex_its piuiidlui flt!»Lart=un* fdilu
18、i eStartLiai tBura t=35te rtLin itinterva 1-&D*CxccStjrt-CxccStjrt-/uir/bin/dDckerd -H tcp:/10.1G.184<159:6732 H unix:/var/run/docker.sock3、docker重新讀取配置文件并重啟docker服務(wù)# systemctl daem on-reload# systemctl restart docker進入Jenkins,選擇系統(tǒng)管理-系統(tǒng)設(shè)置-Docker Builder* Jenkins* 當禮:A耳(匝百冷t,:靜E3:BJeilcinsJaih
19、inqHK 匸層何緒awn-Md 遺密陽儺111 jHA|drH4|NK|b ftnIprQlNtifcH IhSfh|H>liF w Hpi -Iip »«! :ii ' -liwH". a s訥ft肝rvr-nfj-ih 州屮札 dm(!*f «rK.i r ¥ 絢沖丫 產(chǎn)砂觸,r 上 u ' Rf 円時鼎耐PnwrtJmiqiinihGi弓P Codigu* Ihs&is.在Docker URL處填寫暴露的端口 tcp:/50:6732 然后保存Docker EhiilderD<K
20、ker URLICjpMMQ 1M If.o 57325-39# sew *6ST- Ai&i UftLA”i«si LMneccion這樣Jenkins便可調(diào)用host服務(wù)器中的docker功能2、創(chuàng)建Docker鏡像執(zhí)行腳本構(gòu)建容器和鏡像:在上一步構(gòu)建war包之后繼續(xù)選擇POST Steps執(zhí)行我們放在Jenkins宿主機上/home/skyform/目錄下的構(gòu)建腳本Build閔出P&TJGael* amg Run only if build suc-ccsdsRun nnJr rl build succacd or i£ unstdbk- °
21、 Run i ags-dlafs aA buld fg-eliHErecille fihrf血res at l Drolluhdoc k«rHflt«B: - p H.-! > - ia rbor:/akyf o rm/ ngtg rtgat i EmimageT&gwl亡 &r t mi r »=«gg rigationcd / var/lib/j &nkins/worfcspac e/ agig regatioiii/ rm buildikdir buJAdldoc k軸 Wgin lwrt>o
22、r:cp FBMT&HF価" /build/cp /hans/skyfdnn/ag?grogatianbrvr. xnl . /build/ cd buildcp <nr=-!-r'i dockerm -1dock»r build:dTej ,cu rt: p自 sswo rdDELETE Ih ttp: /harbor/api/rtpsitorit s/skyfora/a-gg r*gd>tion/t*gs/v 1d&ek&r puSJh_idxkp-ull"i u i -l :-docktr - H $dc ;krH
23、m run -d a:" u/=I: _36保存后進入操作頁面并點擊立即構(gòu)建舎返回直板軸VBS修改記錄工作空間Q立即枸建0 刪除 Maven project_梯塊口 Git Polling LogMaven project下級項目此時左下角會出現(xiàn)構(gòu)建進度條,藍色表示構(gòu)建成功,紅色表示構(gòu)建失敗,灰色表示構(gòu)建未完成Bui Id History構(gòu)律歷史=find龍#5320179*12 T午l#622017-S-12T2:50J蟻2017-5-5 TF4:55#502017-S-5 下干 4: 4Q#492017-9-5 下午4:3Dp #4S2017 9-5T午蠻恥2017 9-5下午3
24、北#462017-3-531構(gòu)建結(jié)束后點擊構(gòu)建編號,進入結(jié)果查看界面,點擊Con sole Output查看構(gòu)建過程愛 Jenkins追I3會二程 COrtSOte Output令規(guī)刼*dmiaQ No Taas槽 RedeplGyArtWKta see fi叩沖飾* snjfftiJfiQ 構(gòu)建#54 (2017-9-5 16:55:58)Nc亠RflvWon.曲Ml論4泗f也031略bbBM置擰邊曲Module Builds這樣就完成了利用 Jenkins來夠構(gòu)建一個maven項目并將其制作成 Docker鏡像的工作。 這個構(gòu)建過程會根據(jù)你的觸發(fā)器設(shè)置來不斷實施,從而達到監(jiān)控軟件開發(fā)流程,
25、 快速顯示問題與部署的目的。保證開發(fā)人員以及相關(guān)人員省時省力提高開發(fā)效率。五、案例目前SkyForm產(chǎn)品在進行微服務(wù)化改造,我們采用jenkins+docker支撐了 SkyForm產(chǎn)品各個微服務(wù)的開發(fā)、部署、測試的整個過程SkyForm產(chǎn)品中間件 docker化:8f7«912ce95harbor:50M/safari;elasticsearcli'/doertrypom.* 2 we胎的dUc 2 weeks9., 9, fl : 9200KM/tcp F 0 J, i. 6 00 309/tcpyouttiMjtolfflr/勺議疣験 LI t73t59bcf3G,e,
26、G,e:33(;6jWtcp曄護 d2 瀏ha itor: Wffl/5 朗 ton/Kafka :late$t&.6.&.S2-«tcpM 伽帆l帥酬缸!時曠亦弼愉d&1J,0:3W>S9W/Up艸伽目'start la.sh*M hours 訓(xùn))"川身IT5 days sqg刃147155133!梱僦:就施對Mm ii呻礎(chǔ)叫r :la:«:MH呃 3KVkp,21S3->2101Acp zooJdcEf鋼眄另Ih 1 tor: W Kfori:冰炬膽 r :le:Kr2W/kph .3.9.0:liai-l/tcpF
27、 W.cp zoo!廿蘭:km血halt忙液潔師竹幗血贈Er:lKE淵ftcp, 3W8/tep, » H J:lli2->21Bi/tcp煩2VdKter entmmn.H." 5 郵啣'/dockerflitmioin.,/ 5 (fays agoVdocker entr)wln.,/ 5 邯科a恂rt'Or:曲氓fn.曲愉:e托卜r j: k -哦匚:前悴:E0 SWB-/tcp, 3 3 0 9;3U->4i3/t;p zabbii-Mb-rginysqlft 皿”購莽桶店:5i&3; s fori/zabbu prax)時刃IM
28、: b il(2/u*, fS.fl.3:INS!zebbii-pmif!-啊 1 3倍也疤fhartor:MMfityfori/皿血.prw(j n.iql:lr«t161/i)4pp 0.l.&.4:lMS?->lM5VtCp謚血聊耳-昨|l瀾1( M1 吹9hg itor: Sfltt/5 ItytorVibli - sew-啊l: Ui?&r1 礎(chǔ) 11 屯 6.1 R E10I5R1 刖SVtqzribbii-ttfWT-ql2962M29b42aha it or: 5BM/S kFforiql latest7bln/Usi/hit鄧"1J
29、days7blii;tash /nuja.' 11 i&'fi ago'/clR.taG- /rxn_?j.11days'taker aniwit-/ 11 旳伍超Jp V ImuhJp :芋Jp 5餐旳Jp 5 劍5Up 5 陶5Jp 2娜Jp 3螂Up 3郵Jp i螂Jp j娜E1.8 3.'-.»rcpidfahit-iqlefuer"dKgentrypcifiti7 weks 耶 Up 7 weks mysqlSkyForm產(chǎn)品微服務(wù) docker化(19個)35MM95ldSh« rb« r: 5
30、ftM/iJli j f arn/<n: rl. /bifl/sti -E從 /h. J43 ttifwuleik a護呻PlrArlei394fcGf9MChurbr- - OGA/jjkyfc rr vnigk vl/bin/-5h -r*sh丿VH43 ibimjtes agoUp 43 rinurtt?um:a&L<:l.k?lSbc639Lhsrbor. 胸yfr FutmuiitiDE: «1/blfl/sh -cf /h, 1. ,*41忌曲Uv <3 sirwtwqiji DWit iQf9dS3faL>Jele-9ha rtior:
31、SQGffl/skyfEm phi has t: vl/bin/sh -c'/Iwie. 2 hours «tQ3Pfi 2 hersphrtiot«9blib4tgfhirbsrrSSM/ikjfsrn/hvi vl'/huvhbh -cVhMHtt. hB*2 hQuff «goluv 2 hewrtHmIlfsai96ad33ha rh r: 500SI/i ky-f nrn - adKinzvl"/bin/lh -c'/ngi.*3 huLiT怙 曰馬口Ufi 2 hiEKirsa Aninh irbo:鬧關(guān)禹上 j-fc
32、rn/hijr ”嘰:m 1'/bin/iti -c! /Mnr.,. B 'tiwrii ngoUn 71 bdu巧h其賊l&ttSdWSfiatlhi rb Is : 3000/Sfe ytDfm/hrs ync db: id/bin/Sh -C'r r 122 hhi片 ogv師 22 Mii5ezi6»f7*&gahs rbo r -前即旳刖巾 w nitorcQ rafi a ? mi/bifl/sii -cviwe.M hours aw聞 24 hour?icriitorcwfignrbafdsieih a 1 L s r.加酬/&
33、lt;k ffsrn1 end /buiAlh b c1 /Fwae .J弓 ddgf£ driUUiP S d曲樣cnrtih&rbar'1k 計口 rp/1ul/bin/-slh «c Aw. J5 dnyv 円口Ufi 5 d嚴134<eifb5f73harlM r: 59M/»b jrf trr/p nj«t r tlAinZsIi -tJST®5 M盯,訊。UV 5 dvjriMOjfrUSdk-ndfhffaOhirbo; :G0fl/5:lfj'frrr larnrl/bioAll -c'Xl
34、Wir. J7 doirs 沖Dv 7 daysalnrriEdSB7tfd57223ha rbo r s Sim/ityfo rn? dai ttrthanctr 2 vls/bin/iti cVhrOW, Jd dars mdin 1 dafd4iq»«ili4nr*ir377J6cti7546£harbar:59&6/SkpfernrjeldIIectur:rl/bin/slh -l'/hw* 13 dpf nqc!>p 13 daf£flscflUcrtcrhd rtK>r: HM/tky farn/nw:vl1 /b
35、in /1I1 -e1 /hw. - /IS d«f t ««!Uf 1<IS teevndtlb7fa&5b227hhakm: 5SI3fi/s-k yf arn >* ks t kap L ugjim: rl /bin/-xlh -1:'rn?13 dajt ega葉d-3j&WFlugin51W?火舸轟ks rbo r: SOW/1 /fern? nr1! 1 ogir: m -c8/Iwr. > -*J 典efc 歩up 2 wf<rk;G&UlfdOrrW,6.0.-:£507-hnrb-BF F&OMkjri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人住宅房產(chǎn)抵押擔保合同范本4篇
- 二零二五年度模特個人品牌授權(quán)管理合同4篇
- 2025年個人房產(chǎn)買賣售后服務(wù)保障合同3篇
- 2025年度個人藝術(shù)品抵押貸款展期服務(wù)合同3篇
- 2025年教室租賃及管理維護服務(wù)合同2篇
- 2025年度人工智能語音助手產(chǎn)品定制開發(fā)合同范本2篇
- 拆除瀝青路面施工方案
- 2025年度二手車買賣合同車輛交易市場準入及退出協(xié)議范本4篇
- 2025年電商項目策劃與銷售代理合同3篇
- 二零二五年度美團打車智能停車服務(wù)合作協(xié)議4篇
- 公司結(jié)算資金管理制度
- 2024年小學(xué)語文教師基本功測試卷(有答案)
- 項目可行性研究報告評估咨詢管理服務(wù)方案1
- 5歲幼兒數(shù)學(xué)練習(xí)題
- 2024年全國體育單招英語考卷和答案
- 食品安全管理制度可打印【7】
- 2024年九年級語文中考名著閱讀《儒林外史》考前練附答案
- 2024年江蘇揚州市邗城文化旅游發(fā)展有限公司招聘筆試參考題庫含答案解析
- 小學(xué)六年級數(shù)學(xué)100道題解分數(shù)方程
- 社區(qū)獲得性肺炎護理查房內(nèi)科
- 淺談提高中學(xué)生歷史學(xué)習(xí)興趣的策略
評論
0/150
提交評論