사용자 도구

사이트 도구


ci:jenkins

Jenkins

Slave 전략

  • Jenkins Master 를 바로 이용해서 Batch Job scheduling 등을 할 경우, Master 에서 batch job을 곧바로 실행하면 일부 Job 이 시스템 리소스를 다 잡아먹어서 Master 의 스케줄링 작업을 방해할 수도 있다.
  • 따라서 중요 Batch Job 스케줄링을 할 경우에는 Master 에서는 스케줄링만 하고 모든 Job 을 Slave에서만 실행하게 한다.

실행

  • JENKINS_HOME 환경 변수로 설정 정보 및 빌드 정보 실행 디렉토리를 지정할 수 있다.
  • Starting and Accessing Jenkins
    java -jar jenkins.war
    # or
    nohup java -jar jenkins.war > $LOGFILE 2>&1
  • 주요 옵션
    • --httpPort=$HTTP_PORT
    • --httpsPort=$HTTP_PORT
    • --prefix=$PREFIX : context path 처럼 URL 앞에 붙는 값
    • -XX:PermSize=512M -XX:MaxPermSize=2048M -Xmn128M -Xms1024M -Xmx2048M

Jenkins on Redhat 계열 Linux

Jenkins Docker

docker run --name=mytestjenkins -p 8080:8080 -p 50000:50000 \
    -v /your/home:/var/jenkins_home \
    -e TZ=Asia/Seoul \
    -e JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com \
    jenkins/jenkins:lts
  • plugin 자동설치도 가능하다. 이 경우 Docker Image를 별도 생성해야함. Docker 내부에서 /usr/local/bin/install-plugins.sh 스크립트를 호출해서 수행한다. Jenkins Official Docker source README 참조

모니터링

설정

Custom Workspace Directory

  • workspace 경로를 직접 지정가능하다.
  • General → 고급(Advanced) → 사용자 빌드 경로 사용 에서 지정

JUnit Test 결과

  • Post-build Actiosn → Publish JUnit test result report의 값을 (Gradle일 경우) **/build/test-results/*.xml 형태로 지정한다.

Jenkins의 모든 노드에 대해 Job 실행

  • 가끔씩 Jenkins 노드들에 대해 어떠한 일괄작업(cron 비슷한 일)이 필요할 때가 있다.
  • Parameterized Trigger PluginNode Parameter Plugin을 통해 모든 Jenkins 노드에 대한 일괄 처리를 수행할 수 있다.

Job DSL Plugin

인증

  • 인증시 group을 authenticated로 지정하면 로그인 사용자에 대한 권한을 의미한다.

설정의 백업

  • SCM Sync configuration plugin : git, subversion을 통한 설정 백업
  • script를 만들어 백업하기 Backing up your Jenkins configuration
    DUMP="jenkins_data.`date +%Y-%m-%d`.tar.gz"
    JENKINS_HOME=/home/us/jenkins/jenkins-data
    nice -n 19 tar --exclude-from jenkins_backup_exclusions -C $JENKINS_HOME -zcf $DUMP .
    • 백업 제외 목록 파일 jenkins_backup_exclusions
      config-history/*
      jobs/*/workspace*
      jobs/*/builds/*/archive
      plugins/*/*
      plugins/*.bak
      war
      cache
    • 제외목록 내 임의 추가
      jobs/*/builds
      logs

Backup

Logging

  • 플러그인 등의 로그를 분할해서 볼 수 있다.
  • Jenkins 관리 → 시스템 로그에서 신규 로그 기록기 추가에서 플러그인의 패키지를 로거로 지정해준다.

Plugins

Clone Workspace SCM Plugin

  • 클론 대상(부모) 빌드의 Post Build Action에서 Archive for Clone Workspace SCM을 등록하고 대상 파일은 ** 정도로 주면 된다.

Warnings Next Generation Plugin

FindBugs Plugin

  • 버그 종류와 갯수에 따라 빌드를 실패로 간주하게 설정함으로써 점진적으로 코드 품질을 높여갈 수 있다.

Log Parser Plugin

Build User Vars Plugin

  • 빌드릴 실행한 사용자 정보를 환경 변수로 만들어주는 플러그인

Google Login

Build Blocker

  • 다른 Job 이 실행중일 때는 build 를 막게 설정. Job들간 실행이 상호 배타적일 때 사용.

JOB

Parameterized Build

  • 직접 빌드 실행시 파라미터를 주어 실행할 수 있다.
  • 원격으로도 파라미터를 주어 빌드를 실행할 수 있다.

Execute Shell 의 결과로 다른 Parameterized Build 호출

echo DATE=$(date +%Y-%m-%d) > env.properties
  • 그리고서, 해당 파일 env.properties빌드 후 조치 → Trigger parameterized build on other projects 에서 Parameters from properties file에 지정해준다.
  • 만약, Jenkins 자체에 미리 지정된 환경 변수를 파라미터로 넘기려면 Predefined Parameters 로 충분하다.

Process Kill

  • Jenkins Build에서 tomcat등을 실행해 띄워 두려고 하면 자꾸 프로세스가 죽는다.
  • Jenkins Build는 빌드에서 실행한 모든 프로세스를 기본으로 죽인다.
  • 죽이기를 원하지 않는 프로세스는 프로세스를 띄울 때 환경변수 BUILD_ID를 Jenkins가 지정한 것이 아닌 엉뚱한 값으로 바꿔주면된다. Jenkins는 프로세스의 BUILD_ID 환경 변수 값을 보고 프로세스를 죽이기 때문이다.
    BUILD_ID=무언가JENKINS BUILD_ID가 아닌 어떤값
    ./your_hudson_script_that_starts_tomcat.sh

Jenkins build log 파일에서 문자열 검색

  • 특정 날짜의 build 로그 파일들 중에서만 문자열 검색을 하고 싶을 때
  • see find
    find . -name log -newerct yyyy-MM-dd ! -newerct yyyy-MM-dd -exec grep -Hni '검색어' {} \;

External Job

# 외부 모니터링 툴 설치
sudo apt-get install jenkins-external-tool-monitor
 
# 외부 Job 실행, my-jenkins 는 Jenkins Master Server, nightly-backup 은 external job 이름 
JENKINS_HOME=http://my-jenkins/ java -jar jenkins-core-*.jar nightly-backup ./backup.sh --nightly /home

기타

ci/jenkins.txt · 마지막으로 수정됨: 2020/02/13 13:30 저자 kwon37xi