現在、Jenkins Workflow スクリプトからリポジトリにタグを付けようとしています。ステップを使用してみましたsh
が、資格情報が設定されていないために問題が発生します。
fatal: could not read Username for 'https://<repo>': Device not configured
リポジトリにタグを付けるか、資格情報の問題を回避するために使用できる既存の手順はありますか?
現在、Jenkins Workflow スクリプトからリポジトリにタグを付けようとしています。ステップを使用してみましたsh
が、資格情報が設定されていないために問題が発生します。
fatal: could not read Username for 'https://<repo>': Device not configured
リポジトリにタグを付けるか、資格情報の問題を回避するために使用できる既存の手順はありますか?
withCredentials
資格情報バインド プラグインによって提供される手順を使用して、これを機能させることができました。
URLですべてを指定する必要があるため、あまり良くありませんが、これらの値はコンソール出力でマスクされます.
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'MyID', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD']]) {
sh("git tag -a some_tag -m 'Jenkins'")
sh("git push https://${env.GIT_USERNAME}:${env.GIT_PASSWORD}@<REPO> --tags")
}
リモートの URL を知る必要のない別の方法を次に示します。
try {
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'MyID', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD']]) {
sh("${git} config credential.username ${env.GIT_USERNAME}")
sh("${git} config credential.helper '!echo password=\$GIT_PASSWORD; echo'")
sh("GIT_ASKPASS=true ${git} push origin --tags")
}
} finally {
sh("${git} config --unset credential.username")
sh("${git} config --unset credential.helper")
}
これは、git に構成からユーザー名を読み取らせ、資格情報ヘルパーにパスワードのみを提供させることで機能します。最後の追加echo
は、git が引数としてヘルパーに渡すコマンドが、パスワードと同じ行にならないようにするためのものです。