Jenkins의 JNLP 슬레이브를 쉽게 gradlew 한 번에 서고 싶다

7304 단어 Jenkinsjnlpgradle

Jenkins 슬레이브의 시작은 무책으로하면 귀찮습니다.



Jenkins에서는 빌드할 때 Jenkins 슬레이브를 세우게 됩니다만, 아래와 같은 이유로 귀찮습니다.
  • 슬레이브의 등록이 번거롭다

  • 이라고 할까, Jenkins에 설정을 많이 갖게 하고 싶지 않다.

  • Jenkins로부터 슬레이브를 연결해 가는 방식(SSH라든지)이라면, Firewall 설정이 귀찮다.
  • 클라우드에 있는 Jenkins는 진짜 무리.

  • Windows와 Linux, macOS등에서 다른 순서·프로토콜이 필요하게 된다.

  • 번거로움을 극복하다



    그렇게 함으로써, 아래의 방침으로 Jenkins 슬레이브 세우기를 해 가게 됩니다.

  • 슬레이브 등록이 번거롭다.

  • Swarm Plugin 을 사용합니다.
  • 이 플러그인을 사용하면, 슬레이브측으로부터 Jenkins상에 직접 자신의 슬레이브 등록을 온 디맨드 한편 자동으로 실시할 수 있습니다.
  • 설정 화면상에는 "Self-Organizing Swarm Plug-in Modules"라는 이름으로 되어 있으므로 주의.
  • 실제 움직일 때는 Swarm Plugin 의 클라이언트 JAR 를 다운로드해 아래와 같이 인수 첨부로 기동하게 됩니다.
  •   $ java -jar swarm-client.jar \
          -master "http://JenkinsのURL" \
          -name "スレーブの名前のプレフィックス" \
          -uname "JenkinsにログインするID" \
          -password "上記IDのパスワード" \
          -fsroot "スレーブのワークスペースルートパス" \
          -executors "エグゼキュータの数" \
          -deleteExistingClients \
          -label "スレーブノードのラベル1 ラベル2 ラベル3 ..." \
          -mode "exclusive"
    
      # あらかじめJenkinsのJNLPポートをあけておくこと / あらかじめ Swarm Plugin をインストールしておくこと
    


  • Jenkins에서 슬레이브를 연결하러 가는 방식(SSH라든지)이라면, Firewall 설정이 귀찮다.
  • → JNLP 프로토콜을 이용한다.
  • 특정의 포트에 있는 JNLP 포트에 슬레이브측으로부터 쉐이크 핸드 하고 이후 TCP 접속을 한다고 하는 방식입니다.
  • Swarm Plugin을 사용하는 시점에서 이것 밖에 옵션은 없습니다.



  • Windows와 Linux, macOS등에서 다른 순서·프로토콜이 필요하게 된다.
  • → JNLP는 특히 SSH 독립적이므로 괜찮습니다. 어떤 환경에서나 갈 수 있습니다.


  • 하지만 Swarm Plugin의 JAR을 두거나 하는 것이 귀찮아 → Gradle화하면 좋다



    위의 방법으로 해도, Swarm Plugin 클라이언트 JAR 를 다운로드・설치하는 것이 매우 귀찮습니다. 클라이언트 JAR의 버전 업도 할 수 없습니다.

    그렇게 함으로써, Gradle 빌드 스크립트를 사용해 슬레이브의 JAR의 다운로드와 시작 모두를 하게 합니다.

    build.gradle
    repositories { mavenCentral(); maven { url "https://repo.jenkins-ci.org/releases/" } }
    configurations { tool }
    dependencies { tool "org.jenkins-ci.plugins:swarm-client:3.12" }
    
    task start(type: JavaExec) {
        classpath = configurations.tool
        main = "hudson.plugins.swarm.Client"
        args([
            "-master", "http://JenkinsのURL",
            "-name", "スレーブの名前のプレフィックス",
            "-username", "JenkinsにログインするID",
            "-password", "上記IDのパスワード",
            "-fsroot", "スレーブのワークスペースルートパス ",
            "-executors", "エグゼキュータの数",
            "-deleteExistingClients",
            "-labels", ["スレーブノードのラベル1","ラベル2","ラベル3","..."].join(" "),
            "-mode", "exclusive", // 排他モード
        ])
    }
    defaultTasks "start"
    

    위의 파일을 준비하고 아래 명령을 흘리면 슬레이브가 연결됩니다.
    $ gradle
    

    그렇다고 해서 이렇게 되면 Gradle의 설치도 번거롭기 때문에 Gradle wrapper 도 준비하면 Gradle의 설치도 불필요하게 됩니다.
    # JDKのインストールはさすがに必要
    $ ./gradlew
    

    슬레이브를 시작하고 유지하는 것이 번거롭다.



    이렇게 되면, 슬레이브를 시작·유지하는 것이 귀찮아져 옵니다.

    Jenkins 슬레이브 시작 호스트 OS의 데몬 서비스 기능을 사용하여 프로세스를 유지합니다.
  • macOS: launchd
  • 최근 리눅스: systemd . systemd에서 데몬 유닛을 만드는 방법을 살펴 보겠습니다.
  • Windows: 태스크 스케줄러라든지 사용하면 할 수 있다. (자세히보기)

  • macOS 등, 요컨대 증명서나 특정 유저의 환경 포함의 Xcode로 빌드하고 싶다고 생각합니다만, 누군가의 유저 프로세스로서 기동하도록(듯이) 데몬을 구성하는 것을 추천합니다. (경우에 따라서는 슬레이브를 기동하기 위해서만, 전원 ON 후, 유저 로그인이라고 하는 순서가 필요하게 되는군요.)

    지금까지 온 것은이 저장소에 있습니다.



    그 중 리눅스 데몬의 등록 스크립트 더하기…

    좋은 웹페이지 즐겨찾기