2017-05-10 21 views
2

いくつかのコードをビルドおよびデプロイするためにJenkins Multibranchパイプラインをセットアップしました。ブランチに依存して、異なるマシンとディレクトリにコードを配備したいと思います。マルチブランチパイプラインでブランチ固有の構成を設定する方法

For any branch: 
[email protected] 
TARGET_HOST_KEY="… some key …" 
TARGET_DIRECTORY="project/`encode $BRANCH_NAME`/" 

For master, additionally: 
[email protected] 
TARGET_HOST_KEY="… some other key …" 
TARGET_DIRECTORY="target_direcotory" 

TARGET_HOSTの設定はどこに保存しますか?これらの設定は独立して変更される可能性があるので、これらの設定をソースコードと共にバージョン化することは避けてください。

私の最初の試みは、ジョブの設定部分に環境変数を設定することでしたが、Jenkinsインターフェース内で設定を見つけることができませんでした。私はこれまで考えられて

アイデア:

  • は、信頼できるサーバーからターゲット設定をダウンロードしてください(一部このコメントで提案:Jenkins Multibranch Pipelines - Configuring properties in branches?

  • 使用の2つのジョブ:Jenkinsfileを引くために最初の仕事gitリポジトリから環境変数を設定して、実際のプロジェクトをチェックアウトし、ビルドしてデプロイするために2番目のジョブを呼び出します。

答えて

1

あなたのJenkinsfileでgroovyコードを使用することができます。 あなたJenkinsfileは次のようになります。

def func 
stage('load script') { 
    // Funktionen werden geladen 
    checkout(..) 
    func = load './jenkins/lib/build-functions.groovy' 
} 
func.setEnv(BRANCH_NAME) 
:あなたは、各Jenkinsfileでこのコードを持ってしたくない場合は

def TARGET_HOST="" 
def TARGET_HOST_KEY="" 
def TARGET_DIRECTORY="" 
node ('master') { 
    stage('detect branch') { 
     println("now parsing branch name:"+BRANCH_NAME) 
     def branch=BRANCH_NAME 
     // extract the information you need with regex 
     def m=BRANCH_NAME=~ "branches/sprints/([0-9]{4})/(.*)" 
     assert m instanceof java.util.regex.Matcher          
     if (!m) {  
      // no information match the regex, should be production 
      m=BRANCH_NAME=~ "production" 
      if (!m) {               
       throw new RuntimeException("This branch is neather production nor recognized sprint.") 
      }    
      TARGET_HOST="[email protected]" 
      TARGET_HOST_KEY="… some other key …" 
      TARGET_DIRECTORY="target_direcotory" 
     } 
     else { 
      // sprint branch matched 
      TARGET_HOST="[email protected]" 
      TARGET_HOST_KEY="… some key …" 
      TARGET_DIRECTORY="project-$m" 
     } 
    } 
} 

、あなたはこのようにJenkinsfileによってインポートされるの.groovyファイルを使用することができます

よろしくお願いいたします。

+0

まずは、外部ファイルのご利用ありがとうございます。私は私のJenkinsマスターのファイルシステムに.groovyファイルを追加できることを理解しています。デプロイターゲットをスワップするには、JenkinsサーバーにSSHを適用し、そのファイルを変更する必要があります。 UIを介してターゲットのリストを維持する可能性はありますか? EnvInjectを試しましたが、マルチブランチパイプラインで動作させることができませんでした。 – SomeBdyElse

関連する問題