programing tip

Gitlab CI를 사용하여 Java Maven 프로젝트를 빌드하는 방법은 무엇입니까?

itbloger 2020. 12. 9. 07:55
반응형

Gitlab CI를 사용하여 Java Maven 프로젝트를 빌드하는 방법은 무엇입니까?


나는 성공하지 못한 채 실험을 해왔고, Linux에서 호스팅되는 Gitlab을 실행하고 있으며 CI 기능에 대해 알아 보려고 노력하고 있습니다.

Gitlab 문서에 따르면 .gitlab-ci.ymlTravis-CI의 Gitlab 구현 파일 만 생성하면 됩니다. 이제 외관상으로는을 사용하여 많은 작업을 수행 할 수 .gitlab-ci.yml있지만 많은 문서에서 Ruby 및 기타 언어를 참조하고 있습니다. Java Maven 프로젝트를 빌드하는 방법에 대해서는 언급되지 않았습니다.

Java로 간단한 애플리케이션을 어떻게 빌드 할 수 있습니까? 공유 러너를 사용할 수 있습니까, 아니면 특정 러너를 사용해야합니까?이 경우 ssh, docker 또는 shell 중 무엇을 선택해야합니까? 그렇다면 .gitlab-ci.yml적어도 Maven으로 프로젝트를 빌드하려면 파일에 무엇을 넣어야 합니까?


도커 러너 등록 과 사용의 하나의 공식 메이븐 도커 이미지 , 예를 들어, maven:3-jdk7귀하의 .gitlab-ci.yml파일을 :

image: maven:3-jdk-7

build:
  script: "mvn install -B"

노트 -B 플래그를 비 대화식 사용하는 것이 좋습니다.

내가 이해하는 한, 주자가 공유되는지 또는 구체적인지는 중요하지 않습니다.


여기에 약간의 정보를 추가하고 싶습니다. 먼저 공유 및 특정 주자와 관련된 몇 가지 혼란을 해결해 봅시다.

공유 러너 : 이름 그대로 공유 러너는 Allowed Shared runners 옵션이 활성화 된 설치된 gitlab 인스턴스에서 모든 단일 프로젝트의 작업을 실행하는 데 사용할 수있는 빌드 프로세스 흐름 인스턴스입니다 . 그 과정을 수행하려면 관리 권한이 필요합니다. 현재 gitlab 문서에 따라 관리 권한으로 만 사용하여 공유 러너를 정의 할 수 있습니다.

특정 주자 이런 종류의 주자는 한 프로젝트의 작업 만 실행합니다.

또한 프로젝트를위한 러너를 선택할 때 염두에 두어야 할 몇 가지 중요한 사항입니다.

  1. 공유 실행기여러 프로젝트간에 요구 사항유사한 작업에 유용 합니다 . 여러 프로젝트에 대해 여러 러너를 유휴 상태로 유지하는 대신 여러 프로젝트를 처리하는 단일 또는 소수의 러너를 가질 수 있습니다. 이를 통해 공통 프로젝트 세트의 실행기를 유지 관리하고 업데이트하기가 더 쉽습니다.
  2. 특정 러너특별한 요구 사항 이있는 작업 이나 특정 요구 사항이있는 프로젝트에 유용합니다 . 작업에 특정 요구 사항이있는 경우이를 염두에두고 특정 러너를 설정할 수 있지만 모든 러너에 대해이 작업을 수행 할 필요는 없습니다. 예를 들어 특정 프로젝트를 배포하려는 경우 이에 대한 올바른 자격 증명을 갖도록 특정 실행기를 설정할 수 있습니다.

이제 프로젝트에 적합한 실행기를 선택하려면 gitlab 실행기에 사용할 수있는 모든 실행기를 새보기로 보는 것이 매우 중요합니다. Gitlab이 이상 좋은 문서를 제공하여 쉽게 우리를 위해이 일을했다 여기에 당신이 다른 집행에 얻을 것이다 다른 옵션이 무엇인지 설명.

러너와 다른 실행자에 대해 더 알고 싶다면이 기사 Gitlab Runner로 시작하는 것이 좋습니다.


문서는 빌드 제어에 사용되는 YAML 구문을 설명합니다.

그럼 다음부터 시작 해보는 건 어떨까요? :

job1:
  script: "mvn package"

아마도 이것은 Maven이 이미 설치된 경우에만 작동하므로 이를 지원 하는 실행기필요합니다 .

나는 GitLab을 사용하지 않았지만 문서공식 Maven Docker 이미지 를 사용하여 빌드를 수행하도록 추가로 사용자 지정할 수 있다고 제안 합니다. 매우 흥미로워 보이지만 문서에 Java 예제가 없다는 데 동의합니다.


저는 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/"

빌드 디버그 작업은 프록시 설정이 올바르게 삽입되었는지 여부 만 확인하는 것입니다. Gitlab을 사용하여 프로젝트-> 설정-> CI / CD 파이프 라인-> 비밀 변수로 이동하여 프록시 환경 변수를 비밀로 설정할 수 있습니다.

마지막 deploy_debug작업은 대상 디렉토리에서 생성 된 내용을 확인하는 것입니다.


이 명령을 사용하지만 일반적으로 java / maven 빌드에 대한 문서는 매우 드물게 보입니다.

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

참고 URL : https://stackoverflow.com/questions/33430487/how-to-use-gitlab-ci-to-build-a-java-maven-project

반응형