<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ? ? ? ? 最近花了一段時間研究jenkins這個工具。所以寫下這篇文章,算是當做記錄吧! # 一、jenkins是什么? ? ? ? ? Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持續、自動的構建/測試軟件項目、監控外部任務的運行(這個比較抽象,暫且寫上,不做解釋)。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。 # 二、CI/CD是什么? ? ? ? ? ?CI(Continuous integration,中文意思是持續集成)是一種軟件開發時間。持續集成強調開發人員提交了新代碼之后,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。借用網絡圖片對CI加以理解。 ![](//upload-images.jianshu.io/upload_images/6464255-1b6e3bfdbece1492.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1000/format/webp) CI ? ? ? ? CD(Continuous Delivery, 中文意思持續交付)是在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境(類生產環境)中。比如,我們完成單元測試后,可以把代碼部署到連接數據庫的Staging環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。下圖反應的是CI/CD 的大概工作模式。 ![](//upload-images.jianshu.io/upload_images/6464255-ba088ec7257062c0.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1000/format/webp) CI/CD # 三、使用Jenkins進行PHP代碼(單元)測試、打包。 ? ? ? ? Jenkins是一個強大的CI工具,雖然本身使用Java開發,但也能用來做其他語言開發的項目CI。下面講解如何使用Jenkins創建一個構建任務。 ?登錄Jenkins, 點擊左側的新建,創建新的構建任務。 ![](//upload-images.jianshu.io/upload_images/6464255-22b3c49af599565d.png?imageMogr2/auto-orient/strip|imageView2/2/w/374/format/webp) 跳轉到如下界面。任務名稱可以自行設定,但需要全局唯一。輸入名稱后選擇構建一個自由風格的軟件項目(其他選項不作介紹)。并點擊下方的確定按鈕即創建了一個構建任務。之后會自動跳轉到該job的配置頁面。 ![](//upload-images.jianshu.io/upload_images/6464255-0febc0bc4ca3cadd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1044/format/webp) 新建自由風格的軟件項目 下圖是構建任務設置界面,可以看到上方的幾個選項**"General", "源碼管理", "構建觸發器","構建環境", "構建", "構建后操作"**。下面逐一介紹。 ## ![](//upload-images.jianshu.io/upload_images/6464255-77998a3e6a70b83f.png?imageMogr2/auto-orient/strip|imageView2/2/w/1032/format/webp) ## 1.General General是構建任務的一些基本配置。名稱,描述之類的。 ![](//upload-images.jianshu.io/upload_images/6464255-60c69c788cdaf271.png?imageMogr2/auto-orient/strip|imageView2/2/w/983/format/webp) General **項目名稱:?**是剛才創建構建任務步驟設置的,當然在這里也可以更改。 **描述:?**對構建任務的描述。?? **丟棄舊的構建:** 服務器資源是有限的,有時候保存了太多的歷史構建,會導致Jenkins速度變慢,并且服務器硬盤資源也會被占滿。當然下方的"保持構建天數" 和 保持構建的最大個數是可以自定義的,需要根據實際情況確定一個合理的值。 其他幾個選項在這里不做介紹,有興趣的可以查看Jenkins"幫助信息", 會有一個大概的介紹。不過這些"幫助信息"都是英文的。 ![](//upload-images.jianshu.io/upload_images/6464255-7e84819c41bf22a5.png?imageMogr2/auto-orient/strip|imageView2/2/w/994/format/webp) 點擊右方的這些"問號"查看"幫助信息" ## 2.源碼管理 源碼管理就是配置你代碼的存放位置。 ![](//upload-images.jianshu.io/upload_images/6464255-0d7722861c56901e.png?imageMogr2/auto-orient/strip|imageView2/2/w/978/format/webp) 源碼管理 **Git:** 支持主流的github 和gitlab代碼倉庫。因我們的研發團隊使用的是gitlab,所以下面我只會對該項進行介紹。 **Repository URL**:倉庫地址 **Credentials**:憑證。可以使用HTTP方式的用戶名密碼,也可以是RSA文件。 但要通過后面的"ADD"按鈕添加憑證。 **Branches to build**:構建的分支。\*/master表示master分支,也可以設置為其他分支。 **源碼瀏覽器**:你所使用的代碼倉庫管理工具,如github, gitlab.?? **URL**:填入上方的倉庫地址即可。 **Version: 8.7**? ?這個是我們gitlab服務器的版本。 **Subversion:**就是SVN,這里不作介紹。 ## **3.構建觸發器** 構建觸發器,顧名思義,就是構建任務的觸發器。 ![](//upload-images.jianshu.io/upload_images/6464255-f1c8d9414165328f.png?imageMogr2/auto-orient/strip|imageView2/2/w/972/format/webp) **觸發遠程構建(例如,使用腳本):** 該選項會提供一個接口,可以用來在代碼層面觸發構建。這里不做介紹,后期可能會用到。 **Build after other projects are built:** 該選項意思是"在其他projects構建后構建"。這里不作介紹,后期可能會用到該選項。 **Build periodically:** 周期性的構建。很好理解,就是每隔一段時間進行構建。日程表類似? ? ? ? linux crontab書寫格式。如下圖的設置,表示每隔30分鐘進行一次構建。 ![](//upload-images.jianshu.io/upload_images/6464255-e7b1a18569d25dd9.png?imageMogr2/auto-orient/strip|imageView2/2/w/931/format/webp) 周期構建 **Build when a change is pushed to GitLab:**當有更改push到gitlab代碼倉庫,即觸發構建。后面會有一個觸發構建的地址,一般被稱為webhooks。需要將這個地址配置到gitlab中,webhooks如何配置后面介紹。這個是常用的構建觸發器。 **Poll SCM:**該選項是配合上面這個選項使用的。當代碼倉庫發生改動,jenkins并不知道。需要配置這個選項,周期性的去檢查代碼倉庫是否發生改動。 ![](//upload-images.jianshu.io/upload_images/6464255-10b8f531e0fb09fa.png?imageMogr2/auto-orient/strip|imageView2/2/w/959/format/webp) 十分鐘檢查一次 # 4.構建環境 構建環境就是構建之前的一些準備工作,如指定構建工具(在這里我使用ant)。 ![](//upload-images.jianshu.io/upload_images/6464255-62b5cda6cd2dc333.png?imageMogr2/auto-orient/strip|imageView2/2/w/979/format/webp) 構建環境中的構建工具 **With Ant:**選擇這個工具,并指定ant版本和jdk版本。這兩個工具的版本我都事先在服務器上安裝,并且在jenkins全局工具中配置好了。 其他選項不作介紹,同樣可以查看"幫助信息" 獲得使用幫助。 # 5.構建 ? ? ? ?選擇下方的增加構建步驟。 ![](//upload-images.jianshu.io/upload_images/6464255-998ed8e7820364d2.png?imageMogr2/auto-orient/strip|imageView2/2/w/474/format/webp) 增加構建步驟 可以選擇的項很多。這里就介紹"Invoke Ant" 和"Execute shell". **Eexcute shell**: 執行shell命令,該工具是針對linux環境的,windows環境也有對應的工? ? ? ? ? ? 具"Execute Windows batch command"。 在構建之前,可能我們需要執行一些命令,比如壓縮包的解壓之類的。為了演示,我就簡單的執行? "echo $RANDOM" 這樣的linux shell下生產隨機數命令。 **Invoke Ant**:Ant是一款java項目構建工具,當然也能用來構建php。 ![](//upload-images.jianshu.io/upload_images/6464255-77b5f4427ce22bef.png?imageMogr2/auto-orient/strip|imageView2/2/w/905/format/webp) **Ant Version**: 選擇Ant版本。這個ant版本是安裝在jenkins服務器上的版本,并且需要在jenkins"系統工具"中設置好。 **Targets**:要執行的操作,一行一個操作任務。以上圖為例,build是構建,tar是打包。 **Build File:** 是Ant構建的配置文件,如果不指定,則是在項目路徑下的workspace目錄中的build.xml。build.xml文件具體怎么配置,后面再細講。 **properties:** 設定一些變量,這些變量可以在build.xml 中被引用。 **Send files or execute commands over SSH:**發送文件到遠程主機或執行命令(腳本) ![](//upload-images.jianshu.io/upload_images/6464255-b2ffd97252eca6eb.png?imageMogr2/auto-orient/strip|imageView2/2/w/886/format/webp) **Name**: SSH Server的名稱。SSH Server可以在jenkins-系統設置中配置。 **source files**: 需要發送給遠程主機的源文件。 **Remove prefix:** 移除前面的路徑。如果不設置這個參數,則遠程主機會自動創建構建源 source files 包含的那個路徑。 **Remote directory**: 遠程主機目錄。 **Exec command**:在遠程主機上執行的命令,或者執行的腳本。 # **6.構建后操作** 構建后操作,就是對project構建完成后的一些后續操作,比如生成相應的代碼測試報告。 ![](//upload-images.jianshu.io/upload_images/6464255-c3797c5affc64e41.png?imageMogr2/auto-orient/strip|imageView2/2/w/1059/format/webp) ![](//upload-images.jianshu.io/upload_images/6464255-03fdd8935afecc88.png?imageMogr2/auto-orient/strip|imageView2/2/w/1009/format/webp) 郵件通知 **Publish Clover PHP Coverage Report:**發布代碼覆蓋率xml格式的文件報告。路徑會在"build.xml"文件中定義 **Publish HTML reports**:發布代碼覆蓋率的HTML報告。?? **Report Crap:** 發布crap報告**。** **E-mail Notification:** 郵件通知,構建完成后發郵件到指定的郵箱。 **以上配置完成后,點擊保存。** # **7.其他相關配置** **?SSH Server配置** 登錄jenkins -- 系統管理 -- 系統設置 配置請看下圖 ![](//upload-images.jianshu.io/upload_images/6464255-15476f9e273daa58.png?imageMogr2/auto-orient/strip|imageView2/2/w/1108/format/webp) SSH SERVER **SSH Servers:** 由于jenkins服務器公鑰文件我已經配置好,所以之后新增SSH Servers 只需要配置這一項即可。? **Name:** 自定義,需要全局唯一。 **HostName:** 主機名,直接用ip地址即可。 **Username:** 新增Server的用戶名,這里配置的是root。 **Remote Directory:** 遠程目錄。jenkins服務器發送文件給新增的server默認是在這個目錄。 ### Ant 配置文件 "build.xml" 接下來講解Ant 構建配置文件"build.xml"。 之所以是build.xml 這是因為官方慣例。就好比任何編程語言的入門都會是打印"Hello world".? 你也可以用其他名稱代替"build.xml" . 下面針對配置文件"build.xml" 關鍵配置進行說明。 ![](//upload-images.jianshu.io/upload_images/6464255-5748077e695741ed.png?imageMogr2/auto-orient/strip|imageView2/2/w/1144/format/webp) project name就是項目名稱,和jenkins所創建的對應。 target name="build" 就是構建的名稱,和jenkins構建步驟 那里的targets對應。depends指明構建需要進行的一些操作。 property 用來設置變量。 fileset 這一行指明了一個文件夾,用include來指明需要包含的文件,exclude指明不包含的文件,"tar"即是打包這個文件夾中匹配到的文件。 下面的這些target都是一些實際的操作步驟,比如make\_runtime這個"target" 就是創建了一些目錄。phpcs就是利用PHP\_CodeSniffer這個工具 對PHP代碼規范與質量檢查工具。 ![](//upload-images.jianshu.io/upload_images/6464255-46af5e32428ad102.png?imageMogr2/auto-orient/strip|imageView2/2/w/968/format/webp) ![](//upload-images.jianshu.io/upload_images/6464255-1f70f8f88ad59d66.png?imageMogr2/auto-orient/strip|imageView2/2/w/966/format/webp) 最后這個target "tar" 就是打包文件。因為上面的build 并沒有包含這個target,所以默認情況下,執行build是不會打包文件的,所以在jenkins project配置界面,Ant構建那一步的targets,我們才會有"build" 和 "tar" 這兩個targets。如果build.xml 中 "build"這個target depends中已經包含"tar" , 就不需要在jenkins中增加"tar"了。 其他一些target 都是利用一些工具對php代碼的操作,比如phpunit是進行php單元測試。這一些方面我沒有深入的研究,只是進行了一些簡單的配置,畢竟不是這方面的專業人士。 ### 配置 Gitlab webhooks 在gitlab的project頁面 打開**settings**,再打開 **web hooks** 。點擊**"ADD WEB HOOK"** 添加webhook。把之前jenkins配置中的那個url 添加到這里,添加完成后,點擊**"TEST HOOK"**進行測試,如果顯示SUCCESS 則表示添加成功。 ![](//upload-images.jianshu.io/upload_images/6464255-9f8d04a1400556f9.png?imageMogr2/auto-orient/strip|imageView2/2/w/246/format/webp) ![](//upload-images.jianshu.io/upload_images/6464255-154a62db330c819b.png?imageMogr2/auto-orient/strip|imageView2/2/w/240/format/webp) # ![](//upload-images.jianshu.io/upload_images/6464255-e4d1ea1e1dbde812.png?imageMogr2/auto-orient/strip|imageView2/2/w/1036/format/webp) ![](//upload-images.jianshu.io/upload_images/6464255-c7a687207b2c26fc.png?imageMogr2/auto-orient/strip|imageView2/2/w/1106/format/webp) ![](//upload-images.jianshu.io/upload_images/6464255-ce8ae810bc2cb0d4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1154/format/webp) 配置phpunit.xml phpunit.xml是phpunit這個工具用來單元測試所需要的配置文件。這個文件的名稱同樣也是可以自定義的,但是要在"build.xml"中配置好名字就行。默認情況下,用"phpunit.xml", 則不需要在"build.xml"中配置文件名。 ![](//upload-images.jianshu.io/upload_images/6464255-aa212d3b3eaff548.png?imageMogr2/auto-orient/strip|imageView2/2/w/798/format/webp) build.xml中phpunit配置 fileset dir 指定單元測試文件所在路徑,include指定包含哪些文件,支持通配符匹配。當然也可以用exclude關鍵字指定不包含的文件。 ![](//upload-images.jianshu.io/upload_images/6464255-dbc0084f6d50a240.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) # 四、進行jenkins project 構建 第一次配置好jenkins project之后,會自動觸發一次構建。此后,每當有commit 提交到master分支(前面設置的是master分支,也可以設置為其他分支),就會觸發一次構建。當然也可以在project頁面手動觸發構建。點擊左邊的"立即構建" 手動觸發構建。 ![](//upload-images.jianshu.io/upload_images/6464255-8b36f9e13eaf3fda.png?imageMogr2/auto-orient/strip|imageView2/2/w/968/format/webp) 手動觸發構建 # 五、構建結果說明 #### **構建狀態** **Successful藍色**:構建完成,并且被認為是穩定的。 **Unstable黃色**:構建完成,但被認為是不穩定的。 **Failed紅色**:構建失敗。 **Disable灰色**:構建已禁用 #### 構建穩定性 構建穩定性用天氣表示:**晴、晴轉多云、多云、小雨、雷陣雨**。天氣越好表示構建越穩定,反之亦然。 #### **構建歷史界面** **?console output:?**輸出構建的日志信息 # **六、jenkins權限管理** 由于jenkins默認的權限管理體系不支持用戶組或角色的配置,因此需要安裝第三發插件來支持角色的配置,本文將使用Role Strategy Plugin。基于這個插件的權限管理設置請參考這篇文章:[http://blog.csdn.net/russ44/article/details/52276222](https://link.jianshu.com?t=http%3A%2F%2Fblog.csdn.net%2Fruss44%2Farticle%2Fdetails%2F52276222),這里不作詳細介紹。 至此,就可以用jenkins周而復始的進行CI了,當然jenkins是一個強大的工具,功能絕不僅僅是以上這些,其他方面要是以后用到,我會更新到這篇文章中。有疑問歡迎在下方留言。 最后,放上一張Jenkins的思維導圖 作者:哥本哈根月光 鏈接:https://www.jianshu.com/p/5f671aca2b5a 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看