Jenkins 샘플 플러그인을 움직여보십시오.
10288 단어 Jenkins 플러그인Jenkins
요약
Jenkins의 플러그인은 쉽게 만들 수 있다는 소문을 들었으므로 튜토리얼을 시도했습니다.
htps : // 우우키. 지킨킨 s. 이오 / ぢ sp ぁ y / 지 킨킨 S / P ㅅ 긴 + 쓰리 리
튜토리얼에서는 빌드 콘솔에 Hello world로 표시하는 플러그인을 만듭니다.
Pipeline용의 함수도 만들어 줍니다.
환경
macOS Sierra v.10.12.6
절차
maven 설치
$ brew install maven
$ mvn -v
Apache Maven 3.5.2 (...)
Maven home: ...
Java version: 1.8.0_144, ...
...
Maven은 3 이상, JDK는 6.0 이상이 필요합니다.
Jenkins의 플러그인 개발에서는 압도적으로 Maven이 사용되는 것 같습니다.
gradle에서도 (+groovy에서도) 개발할 수 있는 것 같습니다만 지금은 지시대로 Maven로 진행합니다.
htps : // m / 445 / / ms / 0 0 16d9c38d949114 에b
maven 설정 파일 설정
아래의 설정 파일을 만들어 두면 플러그인 작성 명령을 칠 때 짧아지므로 편리합니다.
~/.m2/settings.xml<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
<mirrorOf>m.g.o-public</mirrorOf>
</mirror>
</mirrors>
</settings>
샘플 플러그인 만들기
$ mvn archetype:generate -Dfilter=io.jenkins.archetypes:plugin
템플릿이 준비되어 있으므로 사용합니다.
이번에 사용하고 싶은 것은 3개 표시 중 3번째, hello-world-plugin입니다.
위의 명령을 치면 대화식으로 설정을 진행할 수 있습니다.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> io.jenkins.archetypes:empty-plugin (Skeleton of a Jenkins plugin with a POM and an empty source tree.)
2: remote -> io.jenkins.archetypes:global-configuration-plugin (Skeleton of a Jenkins plugin with a POM and an example piece of global configuration.)
3: remote -> io.jenkins.archetypes:hello-world-plugin (Skeleton of a Jenkins plugin with a POM and an example build step.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3
Choose io.jenkins.archetypes:hello-world-plugin version:
1: 1.1
2: 1.2
3: 1.3
Choose a number: 3: 1
[INFO] Using property: groupId = unused
Define value for property 'artifactId': hello-jenkins-plugin-world
Define value for property 'version' 1.0-SNAPSHOT: :
[INFO] Using property: package = org.jenkinsci.plugins.sample
Confirm properties configuration:
groupId: unused
artifactId: hello-jenkins-plugin-world
version: 1.0-SNAPSHOT
package: org.jenkinsci.plugins.sample
Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: hello-world-plugin:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: packageInPathFormat, Value: org/jenkinsci/plugins/sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Project created from Archetype in dir: ~/project/jenkins-plugins/hello-jenkins-plugin-world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:46 min
[INFO] Finished at: 2018-02-25T23:00:51+09:00
[INFO] Final Memory: 15M/177M
[INFO] ------------------------------------------------------------------------
macOS Sierra v.10.12.6
절차
maven 설치
$ brew install maven
$ mvn -v
Apache Maven 3.5.2 (...)
Maven home: ...
Java version: 1.8.0_144, ...
...
Maven은 3 이상, JDK는 6.0 이상이 필요합니다.
Jenkins의 플러그인 개발에서는 압도적으로 Maven이 사용되는 것 같습니다.
gradle에서도 (+groovy에서도) 개발할 수 있는 것 같습니다만 지금은 지시대로 Maven로 진행합니다.
htps : // m / 445 / / ms / 0 0 16d9c38d949114 에b
maven 설정 파일 설정
아래의 설정 파일을 만들어 두면 플러그인 작성 명령을 칠 때 짧아지므로 편리합니다.
~/.m2/settings.xml<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
<mirrorOf>m.g.o-public</mirrorOf>
</mirror>
</mirrors>
</settings>
샘플 플러그인 만들기
$ mvn archetype:generate -Dfilter=io.jenkins.archetypes:plugin
템플릿이 준비되어 있으므로 사용합니다.
이번에 사용하고 싶은 것은 3개 표시 중 3번째, hello-world-plugin입니다.
위의 명령을 치면 대화식으로 설정을 진행할 수 있습니다.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> io.jenkins.archetypes:empty-plugin (Skeleton of a Jenkins plugin with a POM and an empty source tree.)
2: remote -> io.jenkins.archetypes:global-configuration-plugin (Skeleton of a Jenkins plugin with a POM and an example piece of global configuration.)
3: remote -> io.jenkins.archetypes:hello-world-plugin (Skeleton of a Jenkins plugin with a POM and an example build step.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3
Choose io.jenkins.archetypes:hello-world-plugin version:
1: 1.1
2: 1.2
3: 1.3
Choose a number: 3: 1
[INFO] Using property: groupId = unused
Define value for property 'artifactId': hello-jenkins-plugin-world
Define value for property 'version' 1.0-SNAPSHOT: :
[INFO] Using property: package = org.jenkinsci.plugins.sample
Confirm properties configuration:
groupId: unused
artifactId: hello-jenkins-plugin-world
version: 1.0-SNAPSHOT
package: org.jenkinsci.plugins.sample
Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: hello-world-plugin:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: packageInPathFormat, Value: org/jenkinsci/plugins/sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Project created from Archetype in dir: ~/project/jenkins-plugins/hello-jenkins-plugin-world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:46 min
[INFO] Finished at: 2018-02-25T23:00:51+09:00
[INFO] Final Memory: 15M/177M
[INFO] ------------------------------------------------------------------------
$ brew install maven
$ mvn -v
Apache Maven 3.5.2 (...)
Maven home: ...
Java version: 1.8.0_144, ...
...
<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
<mirrorOf>m.g.o-public</mirrorOf>
</mirror>
</mirrors>
</settings>
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> io.jenkins.archetypes:empty-plugin (Skeleton of a Jenkins plugin with a POM and an empty source tree.)
2: remote -> io.jenkins.archetypes:global-configuration-plugin (Skeleton of a Jenkins plugin with a POM and an example piece of global configuration.)
3: remote -> io.jenkins.archetypes:hello-world-plugin (Skeleton of a Jenkins plugin with a POM and an example build step.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3
Choose io.jenkins.archetypes:hello-world-plugin version:
1: 1.1
2: 1.2
3: 1.3
Choose a number: 3: 1
[INFO] Using property: groupId = unused
Define value for property 'artifactId': hello-jenkins-plugin-world
Define value for property 'version' 1.0-SNAPSHOT: :
[INFO] Using property: package = org.jenkinsci.plugins.sample
Confirm properties configuration:
groupId: unused
artifactId: hello-jenkins-plugin-world
version: 1.0-SNAPSHOT
package: org.jenkinsci.plugins.sample
Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: hello-world-plugin:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: packageInPathFormat, Value: org/jenkinsci/plugins/sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.jenkinsci.plugins.sample
[INFO] Parameter: groupId, Value: unused
[INFO] Parameter: artifactId, Value: hello-jenkins-plugin-world
[INFO] Project created from Archetype in dir: ~/project/jenkins-plugins/hello-jenkins-plugin-world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:46 min
[INFO] Finished at: 2018-02-25T23:00:51+09:00
[INFO] Final Memory: 15M/177M
[INFO] ------------------------------------------------------------------------
샘플 플러그인 빌드
$ cd hello-jenkins-plugin-world
$ mvn install
이것으로 빌드가 행해져 플러그인의 실체인 ./target/hello-jenkins-plugin-world.hpi
가 생성되었습니다!샘플 플러그인 디버깅 실행
다음 명령은 Jenkins가 플러그인을 설치 한 상태에서 시작합니다.
$ export MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n"
$ mvn hpi:run
작업이 정의되지 않은 상태이므로 브라우저에서 프리 스타일 및 파이프 라인 작업을 적절한 이름으로 하나씩 만듭니다.내용은 비어 있습니다.
프리 스타일 작업에서 샘플 플러그인 거동
"Say hello world"라는 절차가 추가되었습니다.
적당한 이름을 넣어 둡니다. 적용하고 저장한 후 빌드를 실행합니다.
콘솔을 확인합니다.
「Hello, 호게호게!」라고 방금 전 넣은 이름 앞에 메시지가 표시되게 되었습니다!
프랑스어에 특징적인 문자가 들어가면 경고됩니다.
!
프랑스어 이름이므로 체크를 넣습니다.
이 상태에서 빌드를 하면 프랑스어로 인사되었습니다!
파이프라인 작업에서 샘플 플러그인 거동
파이프라인 작업에서 이 플러그인을 사용하고 싶습니다.
파이프라인 빌드 스크립트에서 이 플러그인을 사용하기 위해 greet이라는 함수를 사용할 수 있도록 정의되어 있습니다.
HelloWorldBuilder.java
@Symbol("greet")
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
...
}
빌드 스크립트는 메시지만 표시하고, Apply& 저장하고 빌드합니다.
node {
greet 'hogehoge'
}
실행 결과 콘솔 화면:
파이프라인에서도 샘플 플러그인이 제대로 작동하는지 확인할 수 있었습니다.
프랑스어 플래그를 붙이면 이런 느낌입니다:
node {
greet name:"hogehoge", useFrench:true
}
실행 결과 콘솔 화면:
파이프라인에서도 프랑스어로 인사할 수 있었습니다!
감상
일단 샘플 플러그인을 움직일 수 있었습니다.
maven은 xml 기반으로 gradle에 비하면 기술량이 많아 보기 어려운 것이 난점이네요.
다른 플러그인이나 레퍼런스를 보면 뭔가 만드는 것은 그만큼 장애물이 높지 않을 것이라고 느꼈습니다.
Reference
이 문제에 관하여(Jenkins 샘플 플러그인을 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toricor_/items/c6ff5d6ec5332b0dd569
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Jenkins 샘플 플러그인을 움직여보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toricor_/items/c6ff5d6ec5332b0dd569텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)