Jenkins Groovyパラメータスクリプトにセキュリティパスワードを追加する方法

Jenkins Groovyパラメータスクリプトにセキュリティパスワードを追加する方法

私の全体的な目標は、リリースブランチにのみ適用されるドロップダウンメニュー、Jenkinsのビルドパラメータを作成することです。私はしばらくこれをやってきて、それを行う方法がたくさんあることを知っています。私が試したアプローチのいくつかを見て、特定のアプローチが私のシナリオに適していない理由と、私が試した方法が私のアプリケーションに最適な理由を説明します。

私の現在の試み

これでアクティブな選択パラメータが作成されました。 (Expandable SelectionやExpanding Selectionなどの他の機能もお勧めします。)そこには私の一般的なスクリプトがあります。 gitのユーザー名とパスワードをプレーンテキストで入力する必要があることを除いて、私は望む方法で正しく機能します。

def getBranches = ("git ls-remote https://<username>:<password>@github.com/<org>/<repo>.git").execute()

def branchNameList = getBranches.text.readLines().collect {
  it.split()[1]
}

def releaseBranchList = branchNameList.findAll { it =~ /refs\/heads\/release-candidate-20.*/ }

def humanReadableReleaseBranchList = releaseBranchList.collect {
  it.replaceAll('refs/heads/', '')
}

return humanReadableReleaseBranchList

私はそれが最もきれいではないことを知っています。私はここで初めてです。

私が試したこと

私はそれを使用しようとしませんでしたが、<username>:<password>失敗しました。また、github資格情報の環境変数を取得するためにuser secret text or filesこのセクションのオプションを試しました。Build Environmentしかし、パラメータプラグイン文書(アクティブ選択、拡張選択など)を多く読み、読み取った後は、その環境変数にアクセスできないことが明らかになりました。これは明らかにビルドフェーズに達した後にのみアクセスできます。私が間違っていない限り。確信を取ろうとしましたが、成功しませんでした。以下は、私がそれを取得しようとする方法の例です。

  • 「ビルド環境」で「ユーザー秘密のテキストまたはファイル」を選択しました。
  • 名前を付けて、私のGithubクレジットを選択してください。
  • その後、Groovy Active Parameterスクリプトで次のことを行いました。 (注:この方法だけでなく、さまざまな方法を試しました。他の方法を知っている場合は教えてください。)
def envVars = Jenkins.instance.getGlobalNodeProperties()[0].getEnvVars() 
def GITHUB_USER = envVars['GITHUB_USER']
def GITHUB_PASS = envVars['GITHUB_PASS']
def getBranches = ("git ls-remote https://GITHUB_USER:[email protected]/<org>/<repo>.git").execute()

今回もたくさん試してみました。私の構文が間違っている可能性があります。私はGroovyに初めて触れました。私は次のdef getBranches = ("git ls-remote https://" + GITHUB_USER + ":" + GITHUB_PASS + "@github.com/<org>/<repo>.git").execute()ことを試しましたdef getBranches = ("git ls-remote https://${GITHUB_USER}:${GITHUB_PASS}@github.com/<org>/<repo>.git").execute()

私がこの方法を選んだ理由

Jenkinsfileのパイプライン方法などの他の方法があることを知っています。最初はこうしようとしました。私はあまり成功しませんでしたが、私に合わないことを克服することができれば、喜んで再試行します。たとえば、次のようになります。

  • このgit ls-remoteリポジトリはJenkinsfileを含むリポジトリとは異なります。私はできますが、gitオプションを実装したいリポジトリにJenkinsfileを入れたくありません。アプリケーションコードなので、多くのQAステップを経なければならないからです。 Jenkinsfileをアプリケーションコードとは別にDevOpsリポジトリに配置すると、より高速になります。
  • 動的パラメータを追加しても常に更新されるわけではありません。
  • 私はgithub APIを使ってみましたが、何らかの理由で別の四半期の結果を得ました。おそらくもう一度やり直して理由を見つけるかもしれませんが、多くの時間を費やしましたが、結果はありませんでした。

Jenkinsfile Pipeline Multirepoのチェックアウト方法に進む前に、見つからなかった他の解決策があることを確認したかったです。

ベストアンサー1

非常にうまく動作するソリューションを見つけました。

https://bart.jakubowski.in/jenkins-active-reactive-plugin/

最後に、このコードを使用して資格情報を取得して使用しました(CREDENTIALS_IDをJenkinsのIDに変更)。

import groovy.json.JsonSlurperClassic
import jenkins.model.Jenkins


creds = getCredentials()

def getCredentials() {
    def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
    com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class,
    Jenkins.instance,
    null,
    null)
    for (c in creds) {
    if (c.id == "CREDENTIALS_ID") {
        user = c.username
        pass = c.password
    }
    }
    def credentials = "${user}:${pass}"
    return credentials.toString()
}


def command = [ "/bin/bash", "-c", "curl --user ${creds} https://some_site_which_requires_authentication" ]

おすすめ記事