久しぶりです... ありがたいことに、私は rpm ベースのシステムを持っていないので、これをテストすることはできません.
パラメータを rpmbuild
に渡すことができます コマンドラインで
rpmbuild --define="version ${env.BUILD_NUMBER}"
仕様のスニペットと rpm のビルドに使用しているスクリプトを投稿すると役立つでしょう。ビルド スクリプトで仕様ファイルを編集する必要はありません。これは、何らかのソース管理から引き出されていると想定しています。 /P>
Jenkins のビルド番号を「リリース」として使用し、fpm でパッケージ化しています。
fpm を Jenkins が提供するいくつかのグローバルと組み合わせます
# $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 ./*)
私の Jenkins セットアップでは、RPM バージョンの番号付けに関してビルド番号を完全にバイパスすることにしました。代わりに、生成されるさまざまなリリースを生成して追跡する自家製のスクリプトを使用します。
私の仕様ファイル:
Version: %{_iv_pkg_version}
Release: %{_iv_pkg_release}%{?dist}
Jenkins ビルド スクリプトでは、
# 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 形式で、管理が簡単です)。同時に実行できるので心配ありませんが、ビルドスレーブがあると機能しません(私が知る限り、私はそれらを使用していないためテストできません)。ソースコードとドキュメントはこちらにあります。
その結果、次のパッケージ バージョン管理スキームが得られます:
# 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
PS:Jenkins ビルド スクリプトは単なる例であることに注意してください。rpmbuild ディレクトリ構造を作成し、.src.rpm および .spec ファイル名を取得するロジックはもう少し複雑です。