programing

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

closeapi 2023. 3. 27. 21:15
반응형

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

저는 지금까지 어떤 실험도 성공하지 못했고, Linux에서 호스팅되는 Gitlab을 실행하고 있으며, CI 기능을 이해하려고 노력하고 있습니다.

Gitlab 은 Gitlab 작성만 ..gitlab-ci.yml★★Travis-CI★Gitlab★★★★ 보면 '이렇게 하다'로 많은 수 있을 것 같아요..gitlab-ci.yml많은 문서에서는 루비와 다른 언어에 대해 언급하고 있습니다.Java Maven 프로젝트를 구축하는 방법에 대해서는 아무것도 언급되지 않았다.

Java에서 간단한 애플리케이션을 구축하려면 어떻게 해야 합니까?유유러 너용 ?용? 용??? ???는는 특특 러너 너? 용? ???"ssh, docker "shell " " " " " " " " " " " " " " " " 。ㅇㅇㅇㅇㅇㅇㅇㅇㅇ에 요?.gitlab-ci.yml메이븐과 함께 프로젝트를 짓기 위해서라도요?

도커 러너를 등록하고 공식 Maven Docker 이미지 중 하나를 사용합니다. 예:maven:3-jdk-11 안에서.gitlab-ci.yml 삭제:

image: maven:3-jdk-11

build:
  script: "mvn install -B"

해 주세요.-B 플래그를 지정합니다.이 플래그는 중단 없이 사용할 것을 권장합니다.

내가 알기론 주자가 공유되든 특정되든 상관없다.

몇 가지 질문이 있습니다.

Java 빌드 질문에 대한 답변을 시작하고 Runners 질문에 대한 답변을 시작하겠습니다.

자바 빌드

가장 기본적인 Java 빌드 구성부터 시작하여 점차 기능을 추가합니다.

1. Java의 기본 빌드

이 구성에서는 Maven 빌드(및 장치 테스트를 명시적으로 제외한 빌드만)를 실행할 수 있습니다.

stages:
  - build

java-build:
  # select the most appropriate image for your project
  image: maven:3.8-openjdk-11
  stage: build
  script:
    - mvn package -DskipTests=true

2. 아티팩트, 캐시 및 권장 Maven 옵션 포함

이 새로운 버전:

  • Maven 빌드 출력을 GitLab 아티팩트(나중에 다운스트림 파이프라인에서 사용하기 위해)로 선언합니다.
  • GitLab의 캐시를 이용하여 로컬 Maven 저장소를 캐시합니다(in..m2/repository
  • 에서는 CI/CD 컨텍스트에서 사용하도록 권장되는 Maven 옵션도 몇 가지 적용합니다.
stages:
  - build

variables:
  # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
  MAVEN_OPTS: >-
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=.m2/repository
    -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN
    -Dorg.slf4j.simpleLogger.showDateTime=true
    -Djava.awt.headless=true
  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
  # when running from the command line.
  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
  MAVEN_CLI_OPTS: >-
    --batch-mode
    --errors
    --fail-at-end
    --show-version
    -DinstallAtEnd=true
    -DdeployAtEnd=true  

java-build:
  # select the most appropriate image for your project
  image: maven:3.8-openjdk-11
  stage: build
  # Cache downloaded dependencies and plugins between builds.
  # The key here separates one cache per branch/tag ($CI_COMMIT_REF_SLUG)
  cache:
    key: "maven-$CI_COMMIT_REF_SLUG"
    paths:
      - .m2/repository
  script:
    - mvn $MAVEN_CLI_OPTS package -DskipTests=true
  artifacts:
    name: "Maven artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
    paths:
      - "**/target"

3. 유닛 테스트의 경우

CI/CD 파이프라인에 유닛 테스트를 통합하는 경우 두 가지 옵션이 있습니다.

  1. 빌딩과 같은 업무로 운용하다
  2. 그들을 다른 일에 맡기다

파이프라인의 실행 속도와 그린 IT에 관한 고려 사항으로 옵션 1을 선호하지만, 두 번째 옵션을 선호할 수 있다는 것은 인정합니다.

새로운 의 '신규 버전'이 있습니다..gitlab-ci.yml파일, GitLab 유닛 테스트 통합 구현:

stages:
  - build

variables:
  # This will suppress any download for dependencies and plugins or upload messages which would clutter the console log.
  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
  MAVEN_OPTS: >-
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=.m2/repository
    -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN
    -Dorg.slf4j.simpleLogger.showDateTime=true
    -Djava.awt.headless=true
  # As of Maven 3.3.0 instead of this you may define these options in `.mvn/maven.config` so the same config is used
  # when running from the command line.
  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
  MAVEN_CLI_OPTS: >-
    --batch-mode
    --errors
    --fail-at-end
    --show-version
    -DinstallAtEnd=true
    -DdeployAtEnd=true  

java-build-and-test:
  # select the most appropriate image for your project
  image: maven:3.8-openjdk-11
  stage: build
  # Cache downloaded dependencies and plugins between builds.
  # The key here separates one cache per branch/tag ($CI_COMMIT_REF_SLUG)
  cache:
    key: "maven-$CI_COMMIT_REF_SLUG"
    paths:
      - .m2/repository
  script:
    # the 'verify' goal is definitely the most appropriate here
    - mvn $MAVEN_CLI_OPTS verify
  artifacts:
    name: "Maven artifacts from $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
    paths:
      - "**/target"
    reports:
      # declare the JUnit reports (recursive pattern for multi-module projects)
      junit:
        - "**/target/*-reports/TEST-*.xml"

4. 더 나아가다

이 단계부터 빌드 작업은 예를 들어 코드 커버리지 계산 및 통합을 통해 더욱 강화될 수 있지만, 여기에는 조금 더 많은 코드가 필요합니다.

GitLab CI/CD 템플릿을 사용하는 것이 훨씬 적은 노력으로 최첨단 파이프라인을 구현하기 위한 또 다른 방법은 GitLab CI/CD 템플릿을 사용하는 것입니다.예를 들어 다음과 같습니다.

to be continuous는 바로 사용할 수 있는 구성 가능, 확장 가능, 구성 가능한 템플릿 컬렉션을 제공하는 오픈 소스 프로젝트입니다.

러너에 대해서

GitLab 아키텍처는 Runners라는 개념으로 매우 다재다능합니다.Runner는 GitLab CI/CD 작업을 실행할 수 있는 기본 실행자 풀입니다.

주자에 대해 알아야 할 2가지 사항

1. 주자를 특화할 수 있습니다.

GitLab에서는 특수 및 보완 목적으로 만들어진 여러 종류의 주자를 등록할 수 있습니다.

이들을 분리하기 위해 GitLab은 태그 개념을 지원합니다.러너를 등록할 때는 기능 태그명과 관련지어야 합니다.이 태그명은 개발자가 자신의 태그에 가장 적합한 것을 선택하는 데 도움이 됩니다..gitlab-ci.ymlfilename을 클릭합니다.

예를 들어, 4명의 주자가 있다고 가정합니다.

# 묘사 제안 태그
1 Linux 기반의 범용 러너로 코드 구축, 테스트 실행 등 투과적 인터넷 접근 가능 linux,general,internet
또한 태그 없이 작업을 실행할 수 있도록 해야 합니다(디폴트 러너와 같은 경우).
2 를 구축하기 위한 Microsoft 기반의 범용 러너.NET 코드 windows,general,internet
3 인터넷에 접속할 수 없는 초비밀 신경망을 훈련하기 위해 만들어진 컴퓨팅 최적화 러너 linux,compute,ml(기계학습용)
4 코드/인프라스트럭처 도입에 사용되는 사내 데이터센터의 DMZ 뒤에 있는 러너 linux,deploy,datacenter

.Java를 모두 입니다.는, 의 NET 를 할 수 ..gitlab-ci.yml 삭제:

stages:
  - build
  - test
  - deploy

# this job declares no tag: will be executed by default runner (#1)
java-build:
  image: maven:3.8-openjdk-11
  stage: build
  script:
    - Java build code here

dotnet-build:
  image: mcr.microsoft.com/dotnet/sdk:5.0
  stage: build
  tags:
    - windows
    - general
  script:
    - .NET build code here

# this job declares no tag: will be executed by default runner (#1)
java-test:
  image: maven:3.8-openjdk-11
  stage: test
  script:
    - Java test code here

dotnet-test:
  image: mcr.microsoft.com/dotnet/sdk:5.0
  stage: test
  tags:
    - windows
    - general
  script:
    - .NET test code here

deploy:
  stage: deploy
  tags:
    - deploy
    - datacenter
  script:
    - deployment code here

2. 주자의 범위가 다르다

공식 문서 인용:

주자는, 액세스 하고 싶은 유저에 따라서 사용할 수 있습니다.

  • 공유 주자는 GitLab 인스턴스의 모든 그룹 및 프로젝트에서 사용할 수 있습니다.
  • 그룹 주자는 그룹의 모든 프로젝트 및 하위 그룹에서 사용할 수 있습니다.
  • 특정 주자는 특정 프로젝트와 관련되어 있습니다.일반적으로 특정 주자는 한 번에 하나의 프로젝트에 사용됩니다.

여러분, 여기에 약간의 정보를 추가하고 싶습니다.우선 공유 주자와 특정 주자에 대한 혼동을 정리합니다.

공유 러너:이름 그대로 공유 러너는 빌드 프로세스 플로우 인스턴스입니다.이 인스턴스는 설치된 gitlab 인스턴스에서 Allowed Shared runners 옵션이 활성화되어 있는 모든 프로젝트의 작업을 실행하는 데 사용할 수 있습니다.그러려면 당연히 관리자 권한이 필요합니다.현재 gitlab 문서에 따르면 관리자 권한이 있는 경우에만 공유 주자를 정의할 수 있습니다.

특정 러너 이런 종류의 러너는 한 프로젝트의 작업만 수행합니다.

또한, 프로젝트의 주자를 선택할 때 명심해야 할 몇 가지 중요한 사항입니다.

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

이제 프로젝트의 적절한 실행자를 선택하기 위해서는 gitlab runner에 사용할 수 있는 모든 실행자를 새 뷰로 보는 것이 매우 중요합니다.Gitlab은 이 작업을 쉽게 하기 위해 여기 있는 멋진 문서를 제공하고 있습니다.여러 실행자에게서 얻을 수 있는 다양한 옵션이 무엇인지 설명하고 있습니다.

Runner와 다른 실행자에 대해 더 알고 싶다면, Gitlab Runner라는 기사부터 시작할 것을 제안합니다.

Gitlab CI에서 Java 프로젝트를 셋업하기 위해 상당한 시간을 소비했습니다.어느 정도 성공을 거뒀어요.roleve에서 설명한 바와 같이 가장 간단한 솔루션은 공식 보고서(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을 사용하여 Project -> Settings -> CI/CD Pipeline -> Secret Variabs로 프록시 환경변수를 설정할 수 있습니다.

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

이 명령어를 사용하지만 일반적으로 Java/Maven 빌드에 대한 설명서는 매우 드문 것 같습니다.

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

이 문서에서는 빌드를 제어하는 데 사용되는 YAML 구문에 대해 설명합니다.

그럼 다음 것부터 시작해 볼까요?

job1:
  script: "mvn package"

이것은 Maven이 이미 설치되어 있는 경우에만 작동하기 때문에 이를 지원하는 Runner가 필요합니다.

GitLab을 사용한 적은 없지만 문서상으로는 Maven Docker 공식 이미지를 사용하여 빌드를 실행하도록 추가 커스터마이즈할 수 있습니다.매우 흥미롭습니다만, 문서에는 Java의 예가 없습니다.

GitLab CI/CD를 사용하여 Architory에 Maven 프로젝트를 배포하는 방법

java maven 프로젝트를 컴파일 할 수 있습니다..gitlab-ci.yml다음 내용으로 저장소의 루트 디렉토리에 파일을 저장합니다.

image: maven:latest

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/
    - target/

build:
  stage: build
  script:
    - mvn compile

mvn build/test 명령어 뒤에 스텝을 추가할 수 있는지 확인하는 중입니다.빌드 상태에 관계없이 빌드 후 스크립트를 실행할 수 있는 옵션이 있는지 확인하고 있습니다.

다음과 같은 것들이요.mvn 테스트 상태에 관계없이 실행할 수 있습니다.무슨 생각 있어?사후 스크립트로 실행할 수 있는 한 가지 방법을 알고 있지만 피하려고 합니다.

build:
  stage: build
  script:
    - mvn test
    - ./extract_data.sh
#-----------Base image that contains required maven and jdk--------#
image: basebuildimage
variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
stages:
   - build
#----------Build code-----------#
build:
  stage: build  
  script:
    - mvn $MAVEN_CLI_OPTS clean install    

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

반응형