젠킨스 버전업이 이루어지면서 내부적으로 jdk 11 을 이용하게 되었다.

이때 젠킨스를 이용한 빌드시에 사용하는 remote 패키지가 11로 컴파일된거라 구버전의 젠킨스에서 빌드하던 jdk 8버전의 프로젝트들은 빌드시 remote.jar(jdk 11) 실행에 실패하면서 빌드가 실패나버린다.(내용은 버전 맞지 않음)

 

그럼 어떻게 해야할까?

 

우선 젠킨스자체의 메이븐 빌드 로 아이템을 만들지 말고, 프리스타일로 만든뒤

 

쉘로 직접 빌드하게 해주면되긴한다. 

 

쉘환경이 jdk 8 이면된다.

좀더 설명하면

 

1. jenkins build job 생성시 메이븐이아니라 프리스타일로 생성

2. 생성시 만들어진 이름으로, 빌드실행하면 젠킨스의 빌드노드 홈의, workspace 디렉토리 이하에 그 빌드아이템의 방이 생김

3. 해서... 우선 스크립트(execute shell) 는 비워두고 git 등의 정보를 입력하여 item 을 만들고, 그 item 을 빌드하면 생성한 item 이름으로 디렉토리가 생김. 

4. 그 디렉토리안에 보면 git 의 내용을 clone 해온걸 볼 수 있음

5. 여기서 단순히 jar 빌드이면 mvn 명령으로 빌드시킬수 있도록 직접 테스트 해보고 빌드 잘 되는 쉘 명령어를 item 의 execute shell 에 넣어주면됨.

6. 여기서 만약, 빌드 노드에 settings.xml 이 없다면 원래는 젠킨스의 아이템 생성시 메이븐 설정에 provided settings.xml 항목에 임의의 xml 을 정의해서 그걸 빌드에 사용하게 하는데, 우리는 쉘에서 하는거라 직접해줘야한다.

7. 해서 간단히, 해당 git 안에 그 프로젝트에 맞는 settingsl.xml 을 만들고 거기에 설정 넣어둔뒤 execute shell 실행시 실행될 mvn 옵션으로 -s settings.xml   처럼 맞는 xml 을 넣어주면된다.

 

 

전에는 maven 으로 kotlin , java 를 섞어서 프로젝트를 만들기도 했다. (최초에만 그랬고 그뒤부턴 코틀린만으로 된 프로젝트를 만들어왔긴했다)

 

다만 virtual thread 가 나온이후 java 21 에 대한 관심이 올라가면서... 그리고 테스트 목적으로 하나의 프로젝트만 만들어서 테스트해볼때 문법확인상  java, kotlin 둘다되는 프로젝트를 설정해보려고 찾아봤다  gradle , kotlin dsl  환경으로 했을때, ... 매우 간단했다;;

 

기본적은 springboot는 springboot init (kotlin, gradle kotlin dsl , jar )을 사용해서 만들었다. 거기에 한줄만 추가한 내용이다.

 

plugins 에 한줄만 추가하고  kotlin 과 동등한 패키지 레벨로 java 디렉토리(패키지)만 만들어주면되는거였다.

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.2.3"
    id("io.spring.dependency-management") version "1.1.4"
    java
    kotlin("jvm") version "1.9.22"
    kotlin("plugin.spring") version "1.9.22"
    kotlin("plugin.jpa") version "1.9.22"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

java {
    sourceCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-batch")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
//    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
//    implementation("org.springframework.boot:spring-boot-starter-data-redis")
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.apache.kafka:kafka-streams")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3")
    implementation("org.springframework.kafka:spring-kafka")
    runtimeOnly("com.h2database:h2")
    runtimeOnly("com.mysql:mysql-connector-j")
    runtimeOnly("com.oracle.database.jdbc:ojdbc11")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3")
    testImplementation("org.springframework.batch:spring-batch-test")
    testImplementation("org.springframework.kafka:spring-kafka-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs += "-Xjsr305=strict"
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

 

그래들이 지원되지 않아서 하이라이팅이 되진 않겠지만 최초 spring init 으로 생성후 한줄만 더해줬다. 위에서 언급한것 같이 plugins 에 java 한줄만 넣었다. 이게 다였다. 만약 java 의 버전 관련 수정이 필요하다면 java { ... 이하 부분에서 수정하면된다. 아무튼 매우.. 간단했다. 

 

tree 구조는 아래와 같다

➜  springbootdemo git:(main) tree -I build
.
├── HELP.md
├── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── springbootdemo
    │   │               └── controller
    │   │                   └── TestControllerJava.java
    │   ├── kotlin
    │   │   └── com
    │   │       └── example
    │   │           └── springbootdemo
    │   │               ├── SpringbootdemoApplication.kt
    │   │               └── controller
    │   │                   └── TestControllerKotlin.kt
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    │           └── hello.html
    └── test
        ├── java
        │   └── com
        │       └── example
        │           └── springbootdemo
        │               └── TestJava01.java
        └── kotlin
            └── com
                └── example
                    └── springbootdemo
                        ├── SpringbootdemoApplicationTests.kt
                        └── Test01.kt

아.. jenkins 의 파이프라인에서 환경변수 변경해서 ... 실행하는 방법이 있었는데;;;

 

바로 이럴때! chatgpt 에게 물어봤음  2024. 2. 27. 매우 간단하게 리마인드 가능했다.

 

 

Jenkins 파이프라인 스크립트에서 실행하는 콘솔의 환경 변수를 변경하려면, withEnv 스텝을 사용할 수 있습니다. withEnv 스텝은 특정 블록의 실행 동안 환경 변수를 임시로 설정하거나 수정할 수 있게 해줍니다. 이는 주로 steps 블록 내부에서 사용됩니다.

예를 들어, JAVA_HOME 환경 변수의 값을 변경하고 싶다면, 다음과 같이 withEnv 블록을 사용하여 해당 환경 변수에 새 값을 할당할 수 있습니다:

pipeline {
    agent any
    stages {
        stage('Set JAVA_HOME') {
            steps {
                // withEnv를 사용하여 JAVA_HOME 환경 변수 설정
                withEnv(["JAVA_HOME=/new/path/to/java"]) {
                    // 쉘 스크립트 또는 배치 스크립트를 실행하여 새 JAVA_HOME을 사용
                    sh 'echo $JAVA_HOME'
                    // 또는 Windows 배치 스크립트를 사용하는 경우
                    // bat 'echo %JAVA_HOME%'
                }
            }
        }
    }
}

 

이 예제에서, withEnv 블록 내부에서 JAVA_HOME 환경 변수는 /new/path/to/java로 설정됩니다. 이 변경은 withEnv 블록 내부에서만 유효하며, 블록을 벗어나면 원래 값(또는 설정되지 않은 경우)으로 복원됩니다.

sh 스텝은 Unix 기반 시스템(예: Linux, macOS)에서 쉘 스크립트를 실행할 때 사용되며, bat 스텝은 Windows 기반 시스템에서 배치 스크립트를 실행할 때 사용됩니다. 사용하는 Jenkins 노드의 운영 체제에 따라 적절한 스텝을 선택하세요.

withEnv를 사용하면 파이프라인의 특정 부분에서만 환경 변수를 변경할 수 있어, 파이프라인의 다른 부분에는 영향을 주지 않으면서 유연하게 환경을 제어할 수 있습니다.

docker 의 이미지를 실행할때 ... 몇가지 옵션을 줘야했다. 결과적으로만 말하자면

 

docker run -it -p 3301:3306 -e MYSQL_ROOT_PASSWORD=root mysql

-p 

아웃:인 포트값이다. 즉 mysql 이 3306을 열고 있고 host 머신은 3301로 접근하는거다. 해서 3301로 접근해서 도커의 3306으로 접속한다. 

 

-e 

환경변수를 주는거다. 그냥 mysql (여기서는 8.1) 을 실행하면 필수옵션이 없어서 실행 실패가 뜬다.

    You need to specify one of the following:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

이경우는 위와같이 암호를 그냥 설정했다. 아니면 두번째 암호를 비워둠을 허용하는걸로 퉁쳐도 될듯한데... 아무튼

 

-it

이건 컨테이너의 output 을 그대로 찍어주는거다. 전면에 뜨는데, 이걸 백그라운드로 (데몬) 처리하세 화면에 아무것도 안나오게 하려면 d 옵션도 함께 주면된다. 즉 -dit

 

 

여기까지는 도커의 실행이고 dbeaver 에서 접근시 에러가 난다. 내용은 without ssl 인경우 allow 해줘야 하는 옵션이 있는데 그걸 커넥션 설정에서 안해서 그렇다는거다.

 

이 화면에서 allowPublicKeyRetrieval 을 true 로 해주면된다. 

git 사용중에 갑자기 editor 연결시 저런 에러가 난다면???

editor 를 다시 설정하는데 정확히는

 

git config --global core.editor vim -f

 

-f 옵션으로 vim 을 사용해라; 

 

https://stackoverflow.com/questions/22699614/git-commit-messages-lost-by-vi

 

Git commit messages lost by vi

I'm a clumsy typist, and I don't use vi/vim very often, but I do use it for commit messages. However, if you type a wrong command while editing a commit message (:Wq, say, instead of :wq), when you

stackoverflow.com

 

series x 아니고 one x .. 이전 세대 게임기이다. ms 가 출시한 게임기(라고 쓰고 멀티미디어 기기라고 읽는...) 이다.

 

아니.. 시리즈 엑스도 아니고(현세대 기종) 갑자기 왜 이렇게 된거냐면? 그 의식의 흐름을 쫓아가보자...

 

읽기전 지식!

시리즈 엑스 == series x, 시리즈 에스 == series s   이들은 현세대 머신들

원 엑스 == one x , 원 에스 == one s, 이들은 전세대 머신들... 

x 가 더 상위기종이고 s 는 보급기 

그외 더 이전세대인 엑스박스 원 이 있다. (one s 와 사실상 성능은 비슷.. 한걸로 기억함;)

 

  1. 아이들이 마인크래프트의 매력을 느끼기 시작함
  2. 스위치가 집에 있어서 마인크래프트 스위치 사줌
  3. 사실 그와 별개로..난 이미 pc 와 안드로이드에 마인크래프트 구매한게 있음. 다만 pc 는 방에 있고, 타블렛을 주진 않으므로.. 스위치로 단결
  4. 그 와중에.. 난 게임패스 사용자이고(ms 의 게임 구독서비스) 마인크래프트 시리즈를 보다가 던전스를 해봄
  5. .... 재밌음... 이거 디아의 그 느낌이군. 당연하지.. 핵앤슬래시에 파밍이면.. 말 다했다;
  6. 우연히 둘째와 해봄 (첫째가 입원해 있는동안). 둘째도 재밌어함. 다만...
  7. 혼자 시키니 어려워한다. 그렇지.. 이게 순한맛 디아블로라고 해도 은근히 컨트롤 요구하더라. 안하면 죽음;
  8. 해서 게임패스를 쓰니까 클라우드로 2인용하려고 했는데... 안됨; 확인해보니 클라우드로는 다인용 게임들이 모두 다인용 지원해주는건 아닌데 이 게임이 지원해주지 않는게임임
  9. 이제 부터 방법을 찾기 시작함. 간단히 스위치용 던전스를 사면되겠지!?
  10. 실패... 주문까지 했으나.. 후기를 보니 못해먹겠다는 평과 이거하다가 게임기 다른거 사서한다는 글들이 있을정도임
  11. 주문 취소하고 pc 가 nvidia고 난 쉴드tv 도 있으니까 nvidia 의 스트리밍게임 기능을 이용하기로 함. 
  12. 사실상 실패. 곧 서비스 접을거라고 발표함; 그럼 각종 원격 툴을 이용해서 해야지 뭐... 하지만 귀찮음;;; 네이티브 지원이 아닌것들의 불편함은 익히 잘 알고 있음. 
  13. .... 그러다 갑자기 엑스박스  매물이 눈에 보임. 얼마전에 series s 가 20만원초반에 올라오던게 기억남. 
  14. 간간히 역시 있긴한데... 애매하다. 이거하려고 20만원중반을 지불해야하나;
  15. 그러다 엑스박스원 매물이 보이기 시작함. 확인해봄
  16. 오.. 싸다! 엑스박스 one s 알아보다가... one x  매물도 같이봄. 
  17. series s 는 광학드라이브가 없는데, one s one x 는 광학드라이브가 있음. 즉 ... 집에없는 dvd/블루레이 플레이가 생기는것임!!!!  해서 엑스박스 one s/x  를 알아보기 시작함
  18. 둘은... dvd/블루레이가 된다지만 사람들이 엑스쪽이 좀 더 낫다고 평함. 즉 플레이어 기기로 쓰기에 엑스를 추천. 드디어 집에 dvd/블루레이 블레이어가 생김!!!!! 이거 매우 크다!
  19. 성능도... 엑스박스 원 (not s, not x) 에서 던전스를 한 분들왈 버벅그림이 가끔 있다고 했다. one s 가 one 과 비등한 성능인걸 감안하면 one x 로 기울어짐
  20. 또하나의 큰 이유!!!!!.... 레드데드리뎀션 2 를 매우 재밌게 즐겼는데, 레데리 1은 엑박으로 할 경우 인헨스드라고 해서 4k 업 처리가 된다!!!!  레데리 1 이 pc 로 나온적이 없기에 즐길수 없음에도 불구하고 엑박용 레디리1을 미리 구입해놓을정도로 매력을 느낌게임이고 이번에 엑박 one x 를 구입하면 이걸 즐길수 있다!!!!
  21. ... 해서 샀다;

 

요약하자면

  1. 마인크래프트 던전을 여러명이서 하고 싶었다.
  2. 마땅한 대안이 없어서 고민하다가 엑박one x 가 10만원초반이라 구입
  3. 더불어 레디리 1을 즐길수도 있고  dvd/블루레이 플레이어도 덤으로 생겼다.
  4. 매우 잘 돌아감. 만족.
  5. kodi 도 설치됨!!! 즉  각종 OTT 이용가능!

 

xbox one x 장점은?

  1. 지금은 중고가가 매우 착한편이다. 10만원 초반 및 10만원 아래까지도 가능(컨트롤러 미동봉)
  2. AAA 급 타이틀이 아닌이상 그럭저럭 잘 돌아간다. 아직 현역기라는게 틀린말은 아닌듯. 1080p 로 고정하면 할만하다. 
  3. 게임패스를 통해서 매우 저렴하게 게임들을 즐길 수 있다. (이건 가입자에 한정된)
  4. 미디어기기로 훌륭하다. dvd/bluray(3d가능), 각종파일 재생 ( by kodi), OTT(역시 kodi) 등... 아! 디즈니나, 넷플릭스는 앱으로 존재한다.
  5. 기기도 작은편이다. 플레이어 정도의 크기임. (무게는 크기대비 무겁다. 쿨링성능이 괜찮으편임) 

 

nvidia 쉴드 대비 단점은?

  1. 아무래도 전용앱이 딸림. (쉴드는 안드로이드 tv 라 그런대로 많다)
  2. 에뮬돌리는게 좀 애매함. (사실상 어렵다)
    레트로아크가 지원되기 시작하는것 같은데 제대로 지원을 안해서 스펙대비 성능이 안나옴
  3. 부팅이 좀 오래걸림.

 

xbox on x VS nvidia shield ?

글쎄다... 게임에 관심이 없다면 쉴드가 더 나을수 있다. 그리고 쉴드는 하이퍼스핀이라는 에뮬을 통해서 편하게 고전게임을 즐길 수 있다. 그리고 OTT 전용앱이 많아서 편하게 시청가능함. kodi 는 당근이고!  다만 게임이 된다는거지, 각종설정등은 엑박에 비해서 딸린다. 불편함. 

 

다만 게임에도 관심이 있고, player 가 필요하면 엑박이 더 낫다. 다되거든... 다만 상대적으로 불편하다. 전용앱도 적고... kodi 를 통해서 그나마 가능하다. 게임에 있어서 컨트롤러의 연결이나 지원등이 훨 낫다. 편의성에서는 비교가 안된다고 본다. 

 

 

 

.. 내 블로그인데 글쓰기가 없다고?

솔직히 나도 이래서 글쓰기 있는 스킨만 썼는데.. 바보 같은짓이었다;;; 검색한번만 해볼껄;

 

'q' .. Q 키를 누르면 관리화면으로 간다; 거기서 글쓰기하면된다 orz

맞다.. 사라졌다.

 

https://dev.to/abhinavd26/openlens-deprecated-logs-shell-k91

 

OpenLens Deprecated Logs & Shell

OpenLens is the open-source project behind one of the most adopted Kubernetes IDE, Lens. In simple...

dev.to

 

대안은? 

1. extension 기능으로 추가 가능하다. (글의 아래에 보면 @alebcay/openlens-node-pod-menu 가 있고 이 텍스트 그대로 openslens 메뉴의 extension 을 선택후 설치 url? 란에 넣으면 된다)

2. 해당글에서 소개하는 devtron 을 이용한다.

 

우선은 1번으로 하긴하는데... 다른 대안을 찾아야 할지도...

+ Recent posts