今回の環境はこちら
ソース
- GitLab Community Edition 12.5.10
動作環境
- Jenkins v2.204.2
- OpenShift v3.11 : はJenkinsはここからデプロイしてます
- Kubernetes v1.11
概要
GitLabからのcloneって ローカルだとさくっといけるじゃないですか
例: git clone htttps://userid:pass@url〜
でも、Jenkins Pipeline は 甘くなかったです。
結論的には、下記でうまくいきました。
- git の
credentialsId構文を使った - CredentialsIDは Jenkinsに入力時に指定するものでなく、Jenkinsが自動採番するものを使った
Try and Error
下記だとできませんでした。
- Pipelineで、withCredentialsで認証情報をローカル変数に格納し、それをURL内にセット
一応 認証情報はJenkinsに格納して、ソース上で直書きしないようにしてます。
(仮に直書きしても疎通できないらしい。よい子はやっちゃダメよ)
ソース
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
git url: "https://$USERNAME:$PASSWORD@gitのURL", branch: "master"
}
↑ 実は 「UsernamePasswordMultiBinding」が間違っているのかもしれないと思い、「UsernamePassword」でやってもだめでした↓
withCredentials([usernamePassword(
credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
git url: "https://$USERNAME:$PASSWORD@gitのURL", branch: "master"
}
結果 認証エラー
stderr: fatal: Authentication failed for 'https://****@gitのURL/'
Try and OK, but...
Pipelineを使わず、「フリースタイルのビルド」を選択して GitLab連携するとさくっとcloneできます。
このときは「ソースコード」の「Git」から「認証情報」を登録してやります。
しかしPipelineを使いたいんですよね〜
Finally OK
最終的にこれで、Pipelineからでもうまくいきました。
なお、credentialsIdは、あらかじめGitで登録した「ユーザー名とパスワード」でJenkinsに登録し、自動採番されるIDをPipeline内にふってやります。
git credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)',
url: "https://gitのURL", branch: "master"
補記: 認証方法についてのTry & Error
「ユーザー名とパスワード」ってださくないか、と思い、Gitのリポジトリのデプロイトークンや、ssh keys で試しましたが、そちらはうまくいきませんでした。
やり方がわかっていないだけのような気もしますが。。。。
以上、困っている人の参考になれば幸いです