12

私は、ハドソンで C プロジェクトをセットアップして、ほとんどのビルドを行っています。また、これらのソースから rpm を作成するために使用される .rpm 仕様ファイルも持っています。

Hudson を使用して、これらすべてから rpm を構築する方法について経験のある人はいますか?

現在、私が目にする唯一の解決策は、svn がソースをエクスポートし、tarball を作成し、rpm ビルド全体を実行することを確認するスクリプトを実行するジョブをセットアップすることです。これは Hudson とうまく統合されていないようです。たとえば、アーティファクトを収集するにはどうすればよいですか?

4

9 に答える 9

2

私は今2つのプロジェクトのためにそれをしました。難しいことではありませんが、ワークフローに大きく依存します。最も重要な質問は、ビルド後にそのパッケージで何をしたいのかということです。以前のプロジェクトでは、パッケージはリポジトリに移動しただけだったので、アーティファクトを収集する必要はありませんでした。

いずれにせよ、私からのいくつかのヒント:

  1. Hudson/Jenkins のビルド領域が必要です。これは、JENKINS_HOME 内の単なるディレクトリにすることができます。経由で rpmbuild を指定する必要があります.rpmmacros。私のものは と同じように見え%_topdir /srv/buildますが、もちろんそこにさらにマクロを自由に定義できます。
  2. 私の最後のプロジェクトでは、統合ブランチ (統合時間枠内) またはトランク (統合時間枠外) から RPM をビルドする必要がありました。そのために、現在の日付に応じて正しいブランチをチェックアウトして実行する Perl スクリプトを作成しrpmbuild -bb project.specました。このスクリプトは RPM もリポジトリにアップロードするため、この 1 つのスクリプト以外には何も必要ありませんでした。つまり、実際には高度な cron マネージャーのように Hudson を使用していました (1 日に 3 回の自動ビルド、マウス クリックによる手動ビルド)。ただし、不必要にビルドしないように、まだ SVN によってトリガーされていました。
  3. クリーンなパッケージを用意し、コマンドラインからビルドする可能性も保持したかったのです。そのため、私の RPM 仕様は、SVN エクスポートから自動的に独自の tarball を作成しました。現在のプロジェクトのエクスポート機能を削除したので、現在は次のようになっています。

    %define module my_project
    %define _curdir .
    %define _release %(/usr/bin/svnversion -c %_curdir | %__sed 's/.*://g')
    %define _moddir %module-%_version-%_release
    %define _source %(/bin/tar czf %_sourcedir/%_moddir.tar.gz --transform="s|^./|%_moddir/|g" --exclude=.svn .; /bin/echo %_moddir.tar.gz)
    

    仕様の後半:

    Source0: %_source
    
  4. 私の現在のプロジェクトでは、そのスクリプトをパーツに分割したので、現在の Jenkins ジョブはrpmbuild ...コマンドのみで構成されています。その理由は、異なるブランチからビルドする必要がなかったからです。

結論として、Jenkins を使用して RPM を構築することは可能です。困難な部分はクリーンな RPM 仕様を作成することなので、かなり簡単です。それ以外はすべてニーズに依存します。これは、少しのスクリプトまたは Jenkins プラグインで修正できます。

于 2011-03-08T16:25:12.137 に答える
2

上記に同意します。任意のディレクトリから RPM を作成できるようになったら、ビルド プロセスのスクリプトを作成し、それを直接 Hudson に入れることができます。

ここに魔法があります:

rpmbuild --define '_topdir '`pwd` -ba SPECS/helloworld.spec 

これにより、ビルド プロセスの最上位ディレクトリが現在のディレクトリとして設定されます。

私は同じ問題を抱えていて、
http://www.itforeveryone.co.uk/rpm-build-hudson-jenkins.htmlで完全なプロセスを文書化しました。

于 2011-10-16T17:16:59.927 に答える
2

あなたの質問にとても良い答えが得られたかどうかわかりません。

これは私にとってはうまくいきましたが、あなたのニーズには太りすぎだと感じています.

Maven rpm プラグイン http://mojo.codehaus.org/rpm-maven-plugin/を使用して、これでかなりの成功を収めました。 基本的には、スペック ファイルの作成、ソースのレイアウトなどのための DSL です。

利点は、hudson がより簡単に追跡できる Maven アーティファクトです。

最後に、ビルドをホストする yum リポジトリを自動更新する必要があるため、Maven ビルド ( http://docs.codehaus.org/display/GMAVEN/Executing+Groovy+Code ) に少しグルーヴィーなスクリプトを追加しました。しかし、あなたの状況では、rpmプラグインを使用してmakeを呼び出す前に、おそらくスクリプトを使用します。

正直なところ、Maven でスクリプトを実行することの冗長性が主な原因で、上記のソリューションは少し重いと思いますが、うまくいきます。

于 2010-04-29T19:53:02.683 に答える
1

私はそれを自分で行ったことはありませんが、Hudson に rpm をビルドさせることができると思いますが、rpm ビルド領域は Hudson ワークスペース内にあります。その後、アーティファクトとして rpm にリンクできます。

rpm で別のビルド領域を使用する方法を次に示します。

于 2010-02-09T22:49:49.677 に答える
1

Ant を使用して、組み込みの RPM タスクを介して RPM を構築できます。CC タスク (Ant-contrib から) を使用して、Ant で C ソースをコンパイルできます。

その後、Hudson を使用してソフトウェアをビルドおよびパッケージ化できます。

于 2010-09-06T18:13:27.597 に答える
1

ハドソンのビルドツールとして何を使用していますか? 作る?

rpm ビルドが Hudson ジョブのワークスペースで使用するディレクトリ構造を作成できます。これは、Hudson が行うチェックアウトに既にある場合もあれば、ビルド スクリプトによって個別に作成されている場合もあります。このディレクトリから、rpm を作成できます (Hudson から起動する外部プロセスを使用しますか?)。その後、通常の Hudson 構成設定を使用して、結果の rpm を artifacts ディレクトリにコピーできます。(Hudson は、使用できる多くの環境変数を定義しています - ワークスペースの場所はその 1 つです)

于 2010-02-10T13:09:10.620 に答える
0

使用する Jenkins シェル スクリプトは次のとおりです。

export PROJECT_NAME=
export PROJECT_VERSION=

#Cleanup
rm -f /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec 
rm -Rf /tmp/JENKINS-BUILD/SOURCES/$PROJECT_NAME /usr/src/redhat/SOURCES/$PROJECT_NAME

#Copy sources/artifacts
cp /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme/include/$PROJECT_NAME.rpm.spec /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec
cp -R /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme /usr/src/redhat/SOURCES/$PROJECT_NAME
cp -R /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme /tmp/JENKINS-BUILD/SOURCES/$PROJECT_NAME

#Build RPM
rpmbuild --define 'BUILD_NUMBER '$BUILD_NUMBER -ba /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec --define '_topdir '/tmp/JENKINS-BUILD/

cp /tmp/JENKINS-BUILD/RPMS/noarch/$PROJECT_NAME-$PROJECT_VERSION-$BUILD_NUMBER.noarch.rpm /var/lib/jenkins/jobs/$PROJECT_NAME/workspace

(JT / JWTへのクレジット)

于 2012-10-19T17:48:56.260 に答える