2013-04-22 6 views
8
Name:     My Software 
Version:    1.0.5 
Release:    1 
Summary:    This is my software 

확실하지 RPM 사양 파일의 빌드 번호를 사용하지만 :누군가가 전에 또는 쉽게 경우이 시도 경우 젠킨스는

스펙 파일의 버전이 개 고유의 지표가 있습니다

  • 버전은 패키지의 수를 지정
  • 릴리스 ((이는 소프트웨어 버전 지정) - 당신이 RPM을 구축 할 경우,이 생겼습니다, 그리고는 '릴리스'번호를 다른 하나를 구축
.

아무도 시도한 적이 없거나 Jenkins $ BUILD_NUMBER 변수를 사용하여 Release 숫자를 동적으로 변경하면 새로운 빌드가 완료 될 때마다 Release 수가 증가하는지 궁금합니다.

+0

sed -i "s/VERSION/$ BUILD_NUMBER /"rpm.spec –

+0

당신은 소스 제어하에 있어야하므로 빌드가 그것을 변경해서는 안됩니다. – thekbb

+1

[fpm] (https://github.com/jordansissel/fpm)을 시도해보세요. 80 %의 사양 파일보다 훨씬 낫습니다! – quickshiftin

답변

7

오래되었습니다. ... 고맙게도 rpm 기반 시스템이 없으므로 테스트 할 수 없습니다.

당신은 사양하고 RPM을 구축하는 데 사용하는 스크립트의 조각을 게시 도움이 될 것입니다 명령 줄 rpmbuild --define="version = ${env.BUILD_NUMBER}

rpmbuild에 매개 변수를 전달할 수 있습니다. 빌드 스크립트가 spec 파일을 편집하는 것을 원하지 않습니다.이 파일은 일부 소스 제어에서 철수한다고 가정합니다.

+0

spec 파일이 소스 제어에 있습니다 (예). 빌드 스크립트를 사용하여 spec 파일의 내용을 변경하지 말아야한다는 것을 알고 있습니다. 반면에 빌드가있을 때마다 수동으로 spec 파일을 변경하고 체크인하고 다른 모든 관련 변경을 수행해야합니다. 자동으로 변경하면 훨씬 쉬워 질 것입니다 : \ – Sagar

+1

예 ... 그렇기 때문에 빌드 패스가 있어야하며 9.9.9-1과 같은 사양 파일에 가짜 값을 남겨 두십시오. 빌드가 올바른 버전 – thekbb

+0

을 삽입하지 않았 음을 분명히 밝혀야합니다. 작동하지 않았습니다. rpmbuild 도움말에서 언급 한대로'--define = "Release = $ {BUILD_NUMBER}"와'--define = "Release $ {BUILD_NUMBER}"를 시도했습니다. – Sagar

3

나는 젠 타임스의 빌드 번호를 fpm을 통해 '출시'및 패키징으로 사용하고 있습니다. 젠킨스

에서 제공하는 몇 가지 전역에

커플 FPM은

# $BUILD_ID - The current build id, such as "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss) 
# $BUILD_NUMBER - The current build number, such as "153" 
# $BUILD_TAG - String of jenkins-${JOB_NAME}-${BUILD_NUMBER}. Convenient to put into a resource file, a jar file, etc for easier identification. 
아래 예제 명령의 일부 모호한 변수가있다

하지만 $BUILD_NUMBER 내가 (FPM은 반복 그것을 호출 여기 출시을 위해 사용하고 무엇을 대신).

fpm_out=$(fpm -a all -n $real_pkg_name -v $version -t rpm -s dir --iteration $BUILD_NUMBER ./*) 
2

제 젠킨스 설정에서 RPM 버전 번호 매기기와 관련하여 빌드 번호를 무시하기로했습니다. 대신 생성되는 다양한 릴리스를 생성하고 추적하는 자체 제작 스크립트를 사용합니다. 내 스펙 파일에서

:

# Just initialising some variables, and retrieving the release number. 
package="$JOB_NAME" 
# We use setuptools, so we can query the package version like so. 
# Use other means to suit your needs. 
pkg_version="$(python setup.py --version)" 
pkg_release="$(rpm-release-number.py "$package" "$pkg_version")" 

# Creating the src.rpm (ignore the spec file variables) 
rpmbuild --define "_iv_pkg_version $pkg_version" \ 
    --define "_iv_pkg_release $pkg_release" \ 
    -bs "path/to/my/file.spec" 

# Use mock to build the package in a clean chroot 
mock -r epel-6-x86_64 --define "_iv_pkg_version $pkg_version" \ 
    --define "_iv_pkg_release $pkg_release" \ 
    "path/to/my/file.src.rpm" 

rpm-release-number.py 쉽게 유지 보수를 위해, JSON 형식의 파일 기반 데이터베이스 (유지하는 간단한 스크립트입니다

Version: %{_iv_pkg_version} 
Release: %{_iv_pkg_release}%{?dist} 

그리고 젠킨스 구축 스크립트

). 동시에 실행되는 것을 처리 할 수 ​​있으므로 걱정할 필요는 없지만 슬레이브를 빌드하면 작동하지 않습니다 (가능한 한 테스트 할 수 없으므로 사용할 수 없습니다). 소스 코드 및 문서 here을 찾을 수 있습니다.

# Build the same version 3 times 
foo-1.1-1 
foo-1.1-2 
foo-1.1-3 
# Increment the version number, and build twice 
foo-1.2-1 
foo-1.2-2 

추신 : 젠킨스는 스크립트가 단지 예는 rpmbuild 디렉토리 구조를 만들고하려면 .src를 검색 뒤에 논리입니다 구축합니다

결과

나는 다음과 같은 패키지 버전 관리 체계를 얻을 수 있다는 것입니다. rpm과 .spec 파일 이름은 좀 더 복잡합니다.