Windows10에 앱으로 Jenkins를 넣는 방법 (OpenJDK11)

소개



Windows에서 WEB로부터 관리할 수 있는 태스크 스케줄러가 없는 것인가라고 검토하고 있었는데, Jenkins로 좋지 않을까라는 안이한 생각 아래 Windows10에 Jenkins를 넣어 태스크 관리를 해 보았다고 하는 이야기입니다

즉시 빠졌습니다.



Jenkins를 서비스로 설치한 결과 Jenkins에서 GUI 앱이 시작되지 않는다는 현상이 발각
  • 원인 1

  • 우선, Jenkins가 시스템 유저로 기동하고 있는 것 같기 때문에, 원래 앱을 풀 패스 지정해 기동해도, 유저의 프로파일을 읽지 않는다는 사실을 깨달았다.

    이것에 대해서는, Jenkins 서비스의 기동 유저를 이하의 순서로 변경해 대응했다
    1.[コントロールパネル] - [管理ツール] - [サービス] を開く。
    2.一覧から[Jenkins]を探し、右クリック[プロパティ]を選択する。
    3.[ログオン]タブから[アカウント]を選択し、ユーザーとパスワードを入力する。
    4.[OK]をクリックしてサービスを再起動する。
    
  • 원인 2

  • 위의 대응을 한 결과, 앱이 프로필을 읽고 시작하게 되었지만, GUI가 일어나지 않는다. 조사해 본 결과
    Windows Service から GUIアプリ を起動して操作することができない制約のため
    

    그렇다고 해서, Jenkins를 서비스가 아니라 어플리케이션으로서 기동하지 않으면, GUI가 있는 어플리케이션을 기동하거나, 제어는 할 수 없는 것 같다.

    Jenkins를 응용 프로그램으로 설치합시다.



    먼저 일단 서비스로 넣은 Jenkins를 제거하고 JDK를 포함하여 다시 설치하기로 결정합니다.
  • jenkins의 Java Ver 대응 상황



  • Jenkins Ver
    대응 JDK


    2.150.3
    Java 8(1.8.x)까지

    2.168.0
    Java 11(1.11.x)까지


    이번에는 OpenJDK 11을 사용할 예정이므로 2.168
  • 설정

  • 번거롭기 때문에 일괄 설치 배치를 만들었습니다.
    하는 일은

    :TOOLS_SETUP
    -> GNU on Windows를 추가하여 Windows에서 Linux 명령을 사용할 수 있습니다.
    curl을 사용하고 싶을 뿐이므로, cUrl for Windows에서도 좋았다

    : START_SETUP
    -> Jenkins 2.168 전쟁 다운로드

    : NEXT_JAVA
    -> OpenJDK 11 다운로드/설치

    : NEXT_RUN
    -> Jenkins 초기 시작

    jenkins_setup.bat
    @echo off
    @echo "OpenJDK 11 & Jenkins 2.168 Install Batch"
    
    :TOOLS_SETUP
    if exist "%SystemDrive%\tmp\Gow-0.8.0.exe" goto START_SETUP
    @echo "GNU on Windows install"
    mkdir "%SystemDrive%\tmp"
    cd "%SystemDrive%\tmp"
    powershell.exe Invoke-WebRequest -Uri "https://github.com/bmatzelle/gow/releases/download/v0.8.0/Gow-0.8.0.exe" -OutFile "%SystemDrive%\tmp\Gow-0.8.0.exe"
    Gow-0.8.0.exe
    
    :START_SETUP
    if exist "%SystemDrive%\jenkins\jenkins.war" goto NEXT_JAVA
    mkdir "%SystemDrive%\jenkins"
    mkdir "%SystemDrive%\Jenkins\war"
    mkdir "%SystemDrive%\Jenkins\war\logs"
    cd "%SystemDrive%\jenkins"
    curl -L -o "%SystemDrive%\jenkins\jenkins.war" "http://mirrors.jenkins.io/war/latest/jenkins.war"
    
    :NEXT_JAVA
    if exist "%SystemDrive%\java\openjdk-11.0.2_windows-x64_bin.zip" goto NEXT_RUN
    mkdir "%SystemDrive%\java"
    cd "%SystemDrive%\java"
    curl -L -o "%SystemDrive%\java\openjdk-11.0.2_windows-x64_bin.zip" "https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_windows-x64_bin.zip"
    curl -L -o "%SystemDrive%\java\unz552xN.exe" "http://ftp.hans-support.de/pub/hans/misc/packer/unz552xN.exe"
    unz552xN.exe x unzip.exe
    unzip.exe openjdk-11.0.2_windows-x64_bin.zip
    
    :NEXT_RUN
    SET PATH="%PATH%;%SystemDrive%\java\jdk-11.0.2\bin"
    SET JAVA_HOME="%SystemDrive%\java\jdk-11.0.2"
    SET JENKINSBIN="%SystemDrive%\Jenkins\jenkins.war"
    SET JENKINSHOME="%SystemDrive%\Jenkins\war"
    SET JAVABIN="%SystemDrive%\java\jdk-11.0.2\bin\java.exe"
    
    :RUN_ONCE
    %JAVABIN% -Xrs -Xmx1024m -Xms1024m -XX:MaxMetaspaceSize=256m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle %JENKINSOPT% -jar %JENKINSBIN% --httpPort=8080 --webroot=%JENKINSHOME% 
    pause
    

    명령 프롬프트에서 실행
    jenkins_setup.bat
    



    시작되면 브라우저에서 http://127.0.0.1:8080/에 액세스

    초기 비밀번호 입력 등을 완료하고 시작할 수 있으면 OK



    일어난 Jenkins를 떨어뜨리려면 시작 중인 명령 프롬프트에서 CTRL+C 를 누르면



    라고 들리므로 Y 를 입력하고 Enter
  • 두 번째 이후 실행

  • 다음 번 이후에는 설정 부분이 들어 가지 않으므로 다음과 같은 배치를 만들어 실행

    jenkins_exec.bat
    @echo off
    :exec_jenkins
    SET PATH="%PATH%;%SystemDrive%\java\jdk-11.0.2\bin"
    SET JAVA_HOME="%SystemDrive%\java\jdk-11.0.2"
    SET JENKINSBIN="%SystemDrive%\Jenkins\jenkins.war"
    SET JENKINSHOME="%SystemDrive%\Jenkins\war"
    SET JAVABIN="%SystemDrive%\java\jdk-11.0.2\bin\java.exe"
    %JAVABIN% -Xrs -Xmx1024m -Xms1024m -XX:MaxMetaspaceSize=256m -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle %JENKINSOPT% -jar %JENKINSBIN% --httpPort=8080 --webroot=%JENKINSHOME% >> %JENKINSHOME%\logs\jenkins.log 2>>&1
    pause
    

    명령 프롬프트에서 실행
    jenkins_exec.bat
    
  • 모니터링 및 복구

  • 작업 스케줄러에서 5분마다 다음과 같은 배치를 만들어 실행하여 Jenkins가 떨어진 경우에 대응하기로 했다
    프로세스 모니터링 도구를 별도로 넣어도 좋았지만 쓸데없는 자원을 소비하고 싶지 않았습니다.
    8080 포트에서 UI가 시작되지 않으면 시작 배치를 두드리는 행동

    jenkins_watch.bat
    @ECHO OFF
    CD %SystemDrive%\jenkins\
    curl http://localhost:8080/ > NUL
    IF NOT ERRORLEVEL 1 (
        GOTO PGOK
    ) ELSE (
        ECHO jenkinsが起動していません。
        GOTO PGNG
    )
    
    :PGOK
        ECHO jenkins:起動OK %DATE% %TIME% >> %SystemDrive%\jenkins\jenkins_chk.txt
        GOTO END
    :PGNG
        ECHO jenkins:起動NG!!!! %DATE% %TIME% >> %SystemDrive%\jenkins\jenkins_chk.txt
        ECHO jenkins:起動します %DATE% %TIME% >> %SystemDrive%\jenkins\jenkins_chk.txt
        start %SystemDrive%\jenkins\jenkins_exec.bat
        GOTO END
    :END
        ECHO 終了処理
    EXIT
    

    사이고에게



    이제 GUI 앱을 정기적으로 실행하거나 제어하는 ​​것이 WEB 경유로 할 수 있게 된, 게다가 WindowsPC만으로.
    누군가의 도움이 되어서 다행입니다.

    좋은 웹페이지 즐겨찾기