Jenkins: 基礎篇(環境配置)

自動化領域比較有影響力的開源框架jenkins,確實比較強大,易用。不少公司將其用來作持續即成CI(continuous integration)。爲了拓展和強化本身的軟件設計生態系統,也將好久前使用過的jenkins再熟悉一下。在這裏作下備忘。java

 

首先就是下載jenkins安裝包,其實所謂的安裝,是習慣說法,這個直接從官網下載後,一個war包(jenkins.war, 60M大小左右),直接就能夠啓動運行。我本地安裝的是最新版本1.644. 因爲jenkins是java寫的,運行過程當中須要有JDK,即java要先安裝且配置好JAVA_HOME。linux

 

查看下個人java home信息:git

1 [root@CloudGame jenkins]# echo $JAVA_HOME
2 /usr/java/jdk1.8.0_65

 

這個基本要求具有後,就能夠啓動jenkins了,這裏演示,就直接java -jar jenkins.war來啓動,固然,jenkins也能夠在任何servlet容器裏面運行,好比Tomcat等。web

 1 [root@CloudGame jenkins]# java -jar jenkins.war 
 2 Running from: /home/webWps/jenkins/jenkins.war
 3 webroot: $user.home/.jenkins
 4 Jan 20, 2016 1:57:50 PM winstone.Logger logInternal
 5 INFO: Beginning extraction from war file
 6 Jan 20, 2016 1:57:50 PM org.eclipse.jetty.util.log.JavaUtilLog info
 7 INFO: jetty-winstone-2.9
 8 Jan 20, 2016 1:57:51 PM org.eclipse.jetty.util.log.JavaUtilLog info
 9 INFO: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet
10 Jenkins home directory: /root/.jenkins found at: $user.home/.jenkins
11 Jan 20, 2016 1:57:52 PM org.eclipse.jetty.util.log.JavaUtilLog info
12 INFO: Started SelectChannelConnector@0.0.0.0:8080
13 Jan 20, 2016 1:57:52 PM winstone.Logger logInternal
14 INFO: Winstone Servlet Engine v2.0 running: controlPort=disabled
15 Jan 20, 2016 1:57:52 PM jenkins.InitReactorRunner$1 onAttained
16 INFO: Started initialization
17 Jan 20, 2016 1:57:52 PM jenkins.InitReactorRunner$1 onAttained
18 INFO: Listed all plugins
19 Jan 20, 2016 1:57:53 PM jenkins.InitReactorRunner$1 onAttained
20 INFO: Prepared all plugins
21 Jan 20, 2016 1:57:53 PM jenkins.InitReactorRunner$1 onAttained
22 INFO: Started all plugins
23 Jan 20, 2016 1:57:53 PM jenkins.InitReactorRunner$1 onAttained
24 INFO: Augmented all extensions
25 Jan 20, 2016 1:57:58 PM jenkins.InitReactorRunner$1 onAttained
26 INFO: Loaded all jobs
27 Jan 20, 2016 1:57:58 PM hudson.model.AsyncPeriodicWork$1 run
28 INFO: Started Download metadata
29 Jan 20, 2016 1:57:58 PM hudson.model.AsyncPeriodicWork$1 run
30 INFO: Finished Download metadata. 2 ms
31 Jan 20, 2016 1:57:59 PM org.jenkinsci.main.modules.sshd.SSHD start
32 INFO: Started SSHD at port 34811
33 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
34 INFO: Completed initialization
35 Jan 20, 2016 1:57:59 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
36 INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@6ddaa30c: display name [Root WebApplicationContext]; startup date [Wed Jan 20 13:57:59 CST 2016]; root of context hierarchy
37 Jan 20, 2016 1:57:59 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
38 INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@6ddaa30c]: org.springframework.beans.factory.support.DefaultListableBeanFactory@17cfc9f4
39 Jan 20, 2016 1:57:59 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
40 INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@17cfc9f4: defining beans [authenticationManager]; root of factory hierarchy
41 Jan 20, 2016 1:57:59 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
42 INFO: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@574f6e10: display name [Root WebApplicationContext]; startup date [Wed Jan 20 13:57:59 CST 2016]; root of context hierarchy
43 Jan 20, 2016 1:57:59 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
44 INFO: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@574f6e10]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1006f1b7
45 Jan 20, 2016 1:57:59 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
46 INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1006f1b7: defining beans [filter,legacy]; root of factory hierarchy
47 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
48 INFO: Started initialization
49 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
50 INFO: Listed all plugins
51 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
52 INFO: Prepared all plugins
53 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
54 INFO: Started all plugins
55 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
56 INFO: Augmented all extensions
57 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
58 INFO: Loaded all jobs
59 Jan 20, 2016 1:57:59 PM jenkins.InitReactorRunner$1 onAttained
60 INFO: Completed initialization
61 Jan 20, 2016 1:57:59 PM hudson.WebAppMain$3 run
62 INFO: Jenkins is fully up and running

之因此能夠直接java -jar jenkins.war運行,從這個啓動日誌中能夠看到,是由於jenkins內部集成了jetty這個web服務程序,正如spring-boot的框架,默認集成Tomcat服務程序同樣。spring

 

jenkins的啓動後,默認http://localhost:8080就能夠打開查看web UI了,易用就體如今全部的相關配置都在web ui上完成。免除對命令行不習慣的用戶的煩惱,也不須要這裏配置一點,哪裏配置一點的腦裂痛苦。還有,也能夠本身設置選定的端口號,這樣就能夠: java -jar jenkins.war --httpPort=8081 , jenkins有不少啓動配置選項,能夠經過--help查看:apache

 1 [root@CloudGame jenkins]# java -jar jenkins.war --help
 2 Running from: /home/webWps/jenkins/jenkins.war
 3 webroot: $user.home/.jenkins
 4 Jenkins Continuous Integration Engine 1.644
 5 Usage: java -jar jenkins.war [--option=value] [--option=value]
 6 
 7 Options:
 8    --extractedFilesFolder   = folder where extracted files are to be located. Default is the temp folder
 9    --daemon                 = fork into background and run as daemon (Unix only)
10    --config                 = load configuration properties from here. Default is ./winstone.properties
11    --prefix                 = add this prefix to all URLs (eg http://localhost:8080/prefix/resource). Default is none
12    --commonLibFolder        = folder for additional jar files. Default is ./lib
13    
14    --logfile                = redirect log messages to this file
15    --logThrowingLineNo      = show the line no that logged the message (slow). Default is false
16    --logThrowingThread      = show the thread that logged the message. Default is false
17    --debug                  = set the level of debug msgs (1-9). Default is 5 (INFO level)
18 
19    --httpPort               = set the http listening port. -1 to disable, Default is 8080
20    --httpListenAddress      = set the http listening address. Default is all interfaces
21    --httpDoHostnameLookups  = enable host name lookups on incoming http connections (true/false). Default is false
22    --httpKeepAliveTimeout   = how long idle HTTP keep-alive connections are kept around (in ms; default 5000)?
23    --httpsPort              = set the https listening port. -1 to disable, Default is disabled
24                               if neither --httpsCertificate nor --httpsKeyStore are specified,
25                               https is run with one-time self-signed certificate.
26    --httpsListenAddress     = set the https listening address. Default is all interfaces
27    --httpsDoHostnameLookups = enable host name lookups on incoming https connections (true/false). Default is false
28    --httpsKeepAliveTimeout   = how long idle HTTPS keep-alive connections are kept around (in ms; default 5000)?
29    --httpsKeyStore          = the location of the SSL KeyStore file.
30    --httpsKeyStorePassword  = the password for the SSL KeyStore file. Default is null
31    --httpsCertificate       = the location of the PEM-encoded SSL certificate file.
32                               (the one that starts with '-----BEGIN CERTIFICATE-----')
33                               must be used with --httpsPrivateKey.
34    --httpsPrivateKey        = the location of the PEM-encoded SSL private key.
35                               (the one that starts with '-----BEGIN RSA PRIVATE KEY-----')
36    --httpsKeyManagerType    = the SSL KeyManagerFactory type (eg SunX509, IbmX509). Default is SunX509
37    --spdy                   = Enable SPDY. See http://wiki.eclipse.org/Jetty/Feature/NPN
38    --ajp13Port              = set the ajp13 listening port. -1 to disable, Default is disabled
39    --ajp13ListenAddress     = set the ajp13 listening address. Default is all interfaces
40    --controlPort            = set the shutdown/control port. -1 to disable, Default disabled
41    
42    --handlerCountStartup    = set the no of worker threads to spawn at startup. Default is 5
43    --handlerCountMax        = set the max no of worker threads to allow. Default is 40
44    --handlerCountMaxIdle    = set the max no of idle worker threads to allow. Default is 5
45    
46    --sessionTimeout         = set the http session timeout value in minutes. Default to what webapp specifies, and then to 60 minutes
47    --mimeTypes=ARG          = define additional MIME type mappings. ARG would be EXT=MIMETYPE:EXT=MIMETYPE:...
48                               (e.g., xls=application/vnd.ms-excel:wmf=application/x-msmetafile)
49    --maxParamCount=N        = set the max number of parameters allowed in a form submission to protect
50                               against hash DoS attack (oCERT #2011-003). Default is 10000.
51    --usage / --help         = show this message
52    --version                = show the version and quit
53    
54 Security options:
55    --realmClassName               = Set the realm class to use for user authentication. Defaults to ArgumentsRealm class
56    
57    --argumentsRealm.passwd.<user> = Password for user <user>. Only valid for the ArgumentsRealm realm class
58    --argumentsRealm.roles.<user>  = Roles for user <user> (comma separated). Only valid for the ArgumentsRealm realm class
59    
60    --fileRealm.configFile         = File containing users/passwds/roles. Only valid for the FileRealm realm class
61    
62 Access logging:
63    --accessLoggerClassName        = Set the access logger class to use for user authentication. Defaults to disabled
64    --simpleAccessLogger.format    = The log format to use. Supports combined/common/resin/custom (SimpleAccessLogger only)
65    --simpleAccessLogger.file      = The location pattern for the log file(SimpleAccessLogger only)
View Code

 

下面,打開瀏覽器看看效果吧:windows

這裏,是我測試用的一個環境,裏面有意個mueas的project,這個項目以前都是手動操做build,如今,但願用jenkins來定時操做build。瀏覽器

 

我會將這個項目刪除掉,而後新建一個,演示這個操做過程。刪除job,貌似web ui上沒有喲,這個其實也很簡單,在jenkins的默認運行環境路徑下,將其刪除便可(~/.jenkins/jobs),刪除後,須要從新啓動jenkins。否則web ui上還會有記錄,這個多是緩存裏面的數據吧。下面,將mueas job刪除,從0開始說說基本的配置,因爲我這個mueas項目是基於maven的,因此,我就以這個爲例子,作介紹。緩存

1 [root@CloudGame .jenkins]# cd jobs/
2 [root@CloudGame jobs]# ll
3 total 4
4 drwxr-xr-x 4 root root 4096 Jan 20 13:01 mueas
5 [root@CloudGame jobs]# rm -rf mueas/

 

如今說配置的事情。個人mueas項目,是用git這個SCM工具管理的,因此,在jenkins裏面,須要安裝git的插件。jenkins的插件管理很是牛叉啊,現有的插件都有200多個,根據須要,本身選擇安裝,不須要的還能夠uninstall。在jenkins>Manage Jenkins>Manage Plugins>Available下面搜索須要的插件,爲了方便後續繼續使用,我將git, git-client,git-server都安裝了,還有一個GitHub的插件,這個也能夠勾上。安裝完後,須要重啓喲,這個是jenkins的特色,是否是有點像windows安裝應用程序後要重啓os的感腳。。。因爲我已經安裝了,我就將安裝了的tab頁相關信息截圖參考一下吧。session

 

先說下,這個是刪除掉以前的mueas job後重啓完成的界面,因爲一個job都沒有,提示是否建立job。這是後話。這裏主要是說從如何找到plugin的安裝頁面。下圖展現我已經安裝了的插件,這裏有些是jenkins默認就安裝的,紅色框的是我安裝的git相關的插件。徹底能夠根據本身項目須要選擇安裝。

除了上面紅色的框,發現沒,maven的集成插件也有,若沒有,也須要本身安裝maven插件的。再說說這個綠色的框,裏面有的後面有Downgrade信息的按鈕,這個是針對插件更新用的,這個更新是向低版本更新喲。

 

須要的插件安裝完了,那麼,就要說說系統環境配置了。以下圖所示,也很容易找到Jenkins>Manage jenkins>Configure System

 

這裏說說,最基本的配置信息吧,其餘的都採用jenkins默認的配置。須要配置的,以下圖,紅色框選部分,另外,JDK以及Maven安裝信息,要根據本身的系統環境進行配置。個人JDK以及Maven安裝路徑分別是:/usr/java/jdk1.8.0_65和/usr/local/apache-maven-3.3.3(其餘部分的信息,是系統自動填上的,就讓其存在吧,有的是必要的,有的是沒有用的,對我這個項目來講):

上面顯示的就是主要要配置的,配置好後,點擊保存便可。

 

下面進入job的建立了,這裏才進入主題喲,呵呵,其實,真正的項目開發中,不少設置環境或則平臺搭建的這種不能直接體現出經濟效益的事情,更能反映出一個技術人員的功底。廢話哈!

 

而後進一步作配置,下面作詳細的配置,主要是git相關的配置。我選擇的源碼管理工具是git,配置URL,這個就是咱們在linux下作clone用的那個url,如出一轍,由於jenkins運行的時候也是要從遠程repo上clone待build的project。另一個很重要的配置,就是下面的credential了,這個估計很容易搞錯。

 

那麼就說說這個credential的配置,看下圖,我在Kind下拉框中選擇的是SSH Username with private key,由於咱們的git倉庫,採用的是SSH key訪問的。這裏的username填什麼呢?這個是要和下面的private key配合的,就是指當前訪問git repo遠程倉庫採用的認證屬主,個人demo中,在git遠程倉庫的根目錄下的.ssh裏面那個authorized_keys文件裏面追加的公鑰是root用戶的。在這裏,也是用這個用戶來代理操做clone過程。因此,username是root,private key內容爲/root/.ssh/id_rsa這個私鑰的內容。我選擇的private key的類型是Enter directly,因此,要將私鑰的內容完整的拷貝到這裏喲。注意,-----BEGIN RSA PRIVATE KEY -----以及對應的結尾信息也一併拷貝過來喲。

 

接下來,須要配置build的策略了,就是build項目的那個分支,我這裏選擇的是master,這個也是系統默認的配置。另外,就是build的觸發機制,我這裏選擇的是週期觸發,這個配置有些相似linux的corn的規則。我這裏配的是但願天天晚上11點半啓動build過程。

點擊schedule右邊的問號按鈕,有詳細的幫助信息。我這裏貼一個簡單的規則描述,方便理解上面配置當中各個數字的含義以及可能都有什麼配置。

This field follows the syntax of cron (with minor differences). Specifically, each line consists of 5 fields separated by TAB or whitespace:
MINUTE   HOUR   DOM   MONTH   DOW
MINUTE   Minutes within the hour (0–59)
HOUR      The hour of the day (0–23)
DOM        The day of the month (1–31)
MONTH    The month (1–12)
DOW        The day of the week (0–7) where 0 and 7 are Sunday.

 

最後的配置,就是想作什麼的事情。我但願讓其打包,而且不須要執行unit test工做,就是紅色框中的內容。注意,這裏要填寫的是Goals (以及選項,固然選項能夠沒有),不要帶上mvn指令,不然會出錯的喲。(錯誤信息主體爲:You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id> 。。。。)

 

固然,這當中還有不少其餘的配置,好比build前預處理作什麼,以及build完成後的後處理作什麼,這些均可以經過腳本定義要作的事情。我這裏就什麼也不作。至於郵件通知,公司屏蔽了SMTP端口,沒有辦法發郵件,由於發送的過程當中,會報下面的錯誤:

 1 Failed to send out e-mail
 2 
 3 javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;
 4   nested exception is:
 5     java.net.NoRouteToHostException: No route to host
 6     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
 7     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
 8     at javax.mail.Service.connect(Service.java:295)
 9     at javax.mail.Service.connect(Service.java:176)
10     at javax.mail.Service.connect(Service.java:125)
11     at javax.mail.Transport.send0(Transport.java:194)
12     at javax.mail.Transport.send(Transport.java:124)
13     at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:566)
14     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
16     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
17     at java.lang.reflect.Method.invoke(Method.java:497)
18     at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
19     at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
20     at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
21     at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)
22     at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
23     at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
24     at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
25     at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
26     at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
27     at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
28     at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
29     at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
30     at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
31     at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
32     at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
33     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
34     at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
35     at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:123)
36     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
37     at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
38     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
39     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
40     at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
41     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
42     at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
43     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
44     at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
45     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
46     at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
47     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
48     at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
49     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
50     at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
51     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
52     at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
53     at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
54     at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
55     at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
56     at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
57     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
58     at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
59     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
60     at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
61     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
62     at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
63     at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
64     at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
65     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
66     at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
67     at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
68     at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
69     at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
70     at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
71     at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
72     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
73     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
74     at org.eclipse.jetty.server.Server.handle(Server.java:370)
75     at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
76     at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)
77     at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)
78     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
79     at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
80     at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
81     at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
82     at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
83     at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
84     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
85     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
86     at java.lang.Thread.run(Thread.java:745)
87 Caused by: java.net.NoRouteToHostException: No route to host
88     at java.net.PlainSocketImpl.socketConnect(Native Method)
89     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
90     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
91     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
92     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
93     at java.net.Socket.connect(Socket.java:589)
94     at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:286)
95     at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
96     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
97     ... 80 more
View Code

 

到此,一個基本的job就算配置完畢了,下面看看job配置完成後是什麼樣子呢?

先看看1標記的紅框,S表示status,目前是一個新的job,狀態是灰色的,表示沒有執行過。2標記的信息,看看標題,對應信息能夠看出。3標記的圖標,是一個按鈕,能夠當即啓動job的執行。

 

那我這裏就當即執行一下吧,看看最後的效果吧。鼠標點擊一下3的按鈕,執行完畢後,上面的圖所示狀態變爲下面的狀態了(S反映的狀態變成藍色的了,若build失敗,會是紅色的。右邊紅色框裏面,能夠看到這個build所用的時間。#1表示第1次build。。。)。相應的日誌也貼出了讓你們參考下吧。

 1 Started by user anonymous
 2 Building in workspace /root/.jenkins/workspace/mueas
 3 Cloning the remote Git repository
 4 Cloning repository git@109.105.5.108:/data/git/mueas.git
 5  > git init /root/.jenkins/workspace/mueas # timeout=10
 6 Fetching upstream changes from git@109.105.5.108:/data/git/mueas.git
 7  > git --version # timeout=10
 8 using GIT_SSH to set credentials mueas git authentication
 9  > git -c core.askpass=true fetch --tags --progress git@109.105.5.108:/data/git/mueas.git +refs/heads/*:refs/remotes/origin/*
10  > git config remote.origin.url git@109.105.5.108:/data/git/mueas.git # timeout=10
11  > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
12  > git config remote.origin.url git@109.105.5.108:/data/git/mueas.git # timeout=10
13 Fetching upstream changes from git@109.105.5.108:/data/git/mueas.git
14 using GIT_SSH to set credentials mueas git authentication
15  > git -c core.askpass=true fetch --tags --progress git@109.105.5.108:/data/git/mueas.git +refs/heads/*:refs/remotes/origin/*
16  > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
17  > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
18 Checking out Revision e8c79c2becf145c173c1441876d8035fd58ef672 (refs/remotes/origin/master)
19  > git config core.sparsecheckout # timeout=10
20  > git checkout -f e8c79c2becf145c173c1441876d8035fd58ef672
21 First time build. Skipping changelog.
22 Parsing POMs
23 Discovered a new module com.tinguish:mueas mueas
24 Modules changed, recalculating dependency graph
25 [mueas] $ java -cp /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-agent-1.5.jar:/usr/local/apache-maven-3.3.3/boot/plexus-classworlds-2.5.2.jar:/usr/local/apache-maven-3.3.3/conf/logging jenkins.maven3.agent.Maven31Main /usr/local/apache-maven-3.3.3 /root/.jenkins/war/WEB-INF/lib/remoting-2.53.2.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-interceptor-1.5.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.5.jar 60663
26 <===[JENKINS REMOTING CAPACITY]===>���channel started
27 Executing Maven:  -B -f /root/.jenkins/workspace/mueas/pom.xml -s /root/.m2/settings.xml -gs /usr/local/apache-maven-3.3.3/conf/settings.xml package -Dmaven.test.skip=true
28 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - Scanning for projects...
29 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger -                                                                         
30 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
31 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - Building mueas 0.0.1-SNAPSHOT
32 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
33 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
34 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-resources-plugin:2.6:resources (default-resources) @ mueas ---
35 [pool-1-thread-1 for channel] INFO org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering - Using 'UTF-8' encoding to copy filtered resources.
36 [pool-1-thread-1 for channel] INFO org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering - Copying 0 resource
37 [pool-1-thread-1 for channel] INFO org.apache.maven.shared.filtering.DefaultMavenResourcesFiltering - Copying 863 resources
38 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
39 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-compiler-plugin:3.1:compile (default-compile) @ mueas ---
40 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.compiler.CompilerMojo - Changes detected - recompiling the module!
41 [pool-1-thread-1 for channel] INFO org.codehaus.plexus.compiler.javac.JavacCompiler - Compiling 40 source files to /root/.jenkins/workspace/mueas/target/classes
42 [pool-1-thread-1 for channel] WARN org.apache.maven.plugin.compiler.CompilerMojo - /root/.jenkins/workspace/mueas/src/main/java/com/tinguish/mueas/infra/security/MueasAuthenticationProvider.java: /root/.jenkins/workspace/mueas/src/main/java/com/tinguish/mueas/infra/security/MueasAuthenticationProvider.java uses or overrides a deprecated API.
43 [pool-1-thread-1 for channel] WARN org.apache.maven.plugin.compiler.CompilerMojo - /root/.jenkins/workspace/mueas/src/main/java/com/tinguish/mueas/infra/security/MueasAuthenticationProvider.java: Recompile with -Xlint:deprecation for details.
44 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
45 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-resources-plugin:2.6:testResources (default-testResources) @ mueas ---
46 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.resources.TestResourcesMojo - Not copying test resources
47 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
48 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mueas ---
49 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.compiler.TestCompilerMojo - Not compiling test sources
50 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
51 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-surefire-plugin:2.17:test (default-test) @ mueas ---
52 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.surefire.SurefirePlugin - Tests are skipped.
53 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
54 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- maven-war-plugin:2.5:war (default-war) @ mueas ---
55 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.war.WarMojo - Packaging webapp
56 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.war.WarMojo - Assembling webapp [mueas] in [/root/.jenkins/workspace/mueas/target/mueas-0.0.1-SNAPSHOT]
57 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.war.WarMojo - Processing war project
58 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.war.WarMojo - Copying webapp resources [/root/.jenkins/workspace/mueas/src/main/webapp]
59 [pool-1-thread-1 for channel] INFO org.apache.maven.plugin.war.WarMojo - Webapp assembled in [515 msecs]
60 [pool-1-thread-1 for channel] INFO org.codehaus.plexus.archiver.war.WarArchiver - Building war: /root/.jenkins/workspace/mueas/target/mueas-0.0.1-SNAPSHOT.war
61 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - 
62 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - --- spring-boot-maven-plugin:1.2.7.RELEASE:repackage (default) @ mueas ---
63 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
64 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - BUILD SUCCESS
65 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
66 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - Total time: 11.411 s
67 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - Finished at: 2016-01-20T15:54:01+08:00
68 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - Final Memory: 36M/263M
69 [pool-1-thread-1 for channel] INFO org.apache.maven.cli.event.ExecutionEventLogger - ------------------------------------------------------------------------
70 [JENKINS] Archiving /root/.jenkins/workspace/mueas/pom.xml to com.tinguish/mueas/0.0.1-SNAPSHOT/mueas-0.0.1-SNAPSHOT.pom
71 [JENKINS] Archiving /root/.jenkins/workspace/mueas/target/mueas-0.0.1-SNAPSHOT.war to com.tinguish/mueas/0.0.1-SNAPSHOT/mueas-0.0.1-SNAPSHOT.war
72 channel stopped
73 Finished: SUCCESS
View Code

 

好了,基礎篇介紹到此吧,信息量已經比較大了,但願想入門jenkins的小夥伴可以獲得一點幫助!

相關文章
相關標籤/搜索