2015-10-30 66 views
44

我一直在試驗沒有任何成功,我正在運行一個在Linux上託管的Gitlab,並試圖讓我的頭部圍繞CI功能。如何使用Gitlab CI構建Java Maven項目?

根據Gitlab文檔,您只需創建一個.gitlab-ci.yml文件,即Travis-CI的Gitlab實現。現在從外觀上看,你可以用.gitlab-ci.yml完成很多工作,但很多文檔引用了Ruby和其他語言。關於如何構建Java Maven項目沒有任何說法。

如何在Java中構建簡單的應用程序?我可以使用共享運行程序,還是應該使用特定的運行程序,在這種情況下,我應該選擇哪種或哪些運行程序實現:ssh,docker或shell?那麼,我應該如何在.gitlab-ci.yml文件中至少用Maven構建項目呢?

回答

4

該文檔描述了用於控制YAML語法構建:

那麼你爲什麼不試着以下列?:

job1: 
    script: "mvn package" 

想必這隻有在Maven已經安裝的情況下才能工作,所以你需要支持這個的runner

我沒有使用GitLab,但documentation建議您可以進一步定製它以使用official Maven Docker image來執行構建。看起來很有趣,但我同意文檔缺少一個Java示例。

43

Register a Docker runner和使用您的.gitlab-ci.yml文件official Maven Docker images之一,例如,maven:3-jdk7

image: maven:3-jdk-7 

build: 
    script: "mvn install -B" 

注意-Bflag,它被推薦用於非交互使用。

據我所知,運動員是共享還是特定無關緊要。

+0

所以當問到在註冊runner時是否運行shell,ssh或者docker,我應該選擇docker吧? – MRK187

+0

Thx,就像一個魅力!只是一個問題:當我們在'.gitlab-ci.yml'文件中指定圖像時,'gitlab-runner'創建期間指定的圖像會被忽略?例如我使用image * ubuntu:latest *創建了一個運行器,並在yml文件中運行帶有* maven:3-jdk-7 *的作業 – PierreF

+1

@jeanMarcAssin關於此方面的文檔有點稀疏,但本節內容爲:http:// doc。 gitlab.com/ce/ci/docker/using_docker_images.html#overwrite-image-and-services,以下兩條建議您在'.gitlab-ci.yml'文件中指定的圖像將覆蓋* runner的圖像配置有。 – rolve

2

我使用這個命令,但總體上的Java/Maven的文檔建立似乎相當罕見

maven-package: 
    script: "mvn install -B" 
3

我想在這裏補充的信息位球員。首先讓我們澄清關於共享和特定跑步者的一些混淆。

共享亞軍: 正如它的名字的聲音,分享亞軍是可應用於有允許的共享亞軍啓用選項安裝的gitlab實例執行每一個項目的工作在構建流程實例。要做到這一點,當然你需要管理權限。根據目前的gitlab文檔,只有與管理權限一起使用才能夠定義共享的runner。

特定轉輪這種轉輪只執行一個項目的作業。

此外,在爲項目選擇跑步者時,請牢記這幾點。

  1. 共享運動員是有類似的要求,多個項目之間的工作是有用的。許多項目沒有讓多個參賽者空轉,您可以擁有一個或多個處理多個項目的參賽者。這樣可以更輕鬆地維護和更新常用項目組的運行人員。
  2. 特定跑步者對於具有特殊要求或具有特定需求項目的職位非常有用。如果一項工作有一定的要求,你可以考慮到這一點,而不必爲所有參賽者做這件事。例如,如果你想部署某個項目,你可以設置一個特定的跑步者以獲得正確的憑據。

現在要爲項目選擇正確的執行程序,其中非常重要的一點是我們對所有可用的gitlab runner執行程序都有鳥瞰。 Gitlab通過爲here提供很好的文檔解釋了不同的執行者可以獲得哪些不同的選項,從而使我們的工作變得簡單。

如果您想了解更多關於跑步者和不同的執行者,我建議你開始這篇文章, Gitlab Runner

1

我花的時間相當數量試圖建立我們的Gitlab CI Java項目。我得到了一定程度的成功。正如rolve提到的那樣,最直接的解決方案是使用官方倉庫中的圖像:https://hub.docker.com/_/maven

但是,我們有一個公司代理,導致我的構建在獲取項目的依賴關係時獲取超時請求。我嘗試了很多解決方案,最後碰到這個帖子:https://gitlab.com/gitlab-org/gitlab-ce/issues/15167

該帖子本身是關於設置maven緩存下載的依賴關係在本地回購,可以訪問構建。這個想法是你可以在.gitlab-ci.yml中編寫一個本地maven配置文件來設置你的緩存目錄和你的代理。

before_script: 
    -echo '<settings 
      xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
      https://maven.apache.org/xsd/settings-1.0.0.xsd"> 
      <localRepository>/cache/.m2</localRepository> 
      <proxies> 
       <proxy> 
        <active>true</active> 
        <protocol>'$PROXY_PROTOCOL'</protocol> 
        <host>'$PROXY_HOST'</host> 
        <port>'$PROXY_PORT'</port> 
       </proxy> 
      </proxies> 
     </settings>' > $HOME/.m2/settings.xml 

build_debug1: 
    stage: build 
    script: "echo $PROXY_HOST" 

build_debug2: 
    stage: build 
    script: "cat $HOME/.m2/settings.xml" 

build_maven: 
    stage: build 
    script: "mvn $MAVEN_CLI_OPTS package" 
    artifacts: 
    paths: 
     - target/*.jar 

deploy_debug1: 
    stage: package 
    script: "ls target/" 

請注意,構建調試作業僅用於查看代理設置是否正確注入。您可以通過轉至項目 - >設置 - > CI/CD管道 - >祕密變量,使用Gitlab將代理環境變量設置爲祕密。

最後的deploy_debug作業是查看目標目錄中生成的內容。

+0

是否回答?對於給定的問題。 –

+0

我現在已經用我打算用於所有項目的通用解決方案更新了我的答案。 – UltimaWeapon