私の全体的な目標は、リリースブランチにのみ適用されるドロップダウンメニュー、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" ]