GNU/Linux >> Linux の 問題 >  >> Linux

RPM 仕様ファイルで Jenkins BUILD NUMBER を使用する

久しぶりです... ありがたいことに、私は 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 ファイル名を取得するロジックはもう少し複雑です。


Linux
  1. Linuxのiノード番号とは何ですか?

  2. UnicodeテキストでUniqを使用していますか?

  3. Bashでビルド番号を増やしますか?

  1. systemdを使用してスタートアップを管理する

  2. ビルド環境の分離とファイル システムの差分

  3. C で tmpfile() を使用する場合の一時ファイルの場所

  1. rpmパッケージをビルドする方法

  2. Inotifyを使用してファイルへのアクセスを監視しますか?

  3. Grepを使用して発生の総数をカウントしますか?