Jenkinsパイプラインの中からGitLabリポジトリのソースコードをクローンする方法について、ポイントのみを記載した忘備録である。 GitLabはGitHubと異なり、sshによるアクセスとなるため、GitHubとは異なる方法の git clone
が必要なためだ。
必要なプラグイン GitLab Plugin
GitLabリポジトリにアクセスするための認証情報を処理するために、GitLab プラグインが必要となる。「Jenkins の管理」->「プラグインマネージャー」から「利用可能」の中から GitLab
を検索してインストールする。 今回利用した GitLab のバージョンは、1.5.13 である。
参考資料 GitLab プラグインページ,https://plugins.jenkins.io/gitlab-plugin/
GitLabのAPI取得
GitLabとJenkinsが連携するためには、GitLabのAPIキーをJenkinsの認証情報にセットする必要がある。APIキーの取得方法は、GitLabのウェブ画面の右上隅のアカウントのメニューを展開して、Settings を開く。次はSettingsの画面である。この右サイドのメニューのAccess Tokens を選択する。次の例のように、名前、有効期限、権限をチェックして、Create personal access token をクリックすると、キーが表示されるのでコピーしておく。
Jenkinsfileの取り込み
再びJenkinsに戻って、「新規ジョブの作成」->「パイプライン」からジョブのスペックを設定する。パイプラインに移動して、「Pipeline script from SCM」と SCMにGitを選択する。
リポジトリURLは、GitLabでクローンする時と同じように、プロトコルに ssh を指定する。ssh://git@gitlab.labs.local:2224/takara/test-internal.git
「認証情報」を「ビルドするブランチ」を設定する。
認証情報の取り込み
認証情報を追加する際に、次のように GitLab API token を選択して、先に取得したGitLabで生成したAPIをセットする。
パイプライン Jenkinsfile
GitLabリポジトリに登録してあるJenkinsfileを、ここに掲載しておく。このパイプラインは、GitLabのリポジトリからクローンして、コンテナをビルド、Harborのコンテナレジストリへ登録、Kubernetesクラスタへマニフェストをデプロイする。
checkoutの説明は、https://github.com/jenkinsci/gitlab-plugin#pipeline-jobs にある。
pipeline {
environment {
registry = "harbor.labs.local/library/myweb"
dockerImage = ""
KUBECONFIG = credentials('kubeconfig')
}
agent any
stages {
stage("gitlabからのクローン") {
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/master' ]],
extensions: scm.extensions,
userRemoteConfigs: [[
url: "$GIT_URL",
credentialsId: 'gitlab-sshkey2'
]]
])
}
}
stage("test") {
steps {
sh 'ls -al'
sh 'env'
}
}
stage('コンテナイメージのビルド') {
steps {
script {
dockerImage = docker.build registry + ":$BUILD_NUMBER"
}
}
}
stage('コンテナレジストリへプッシュ') {
steps {
script {
docker.withRegistry("https://harbor.labs.local/v1/","harborproj1") {
dockerImage.push()
}
}
}
}
stage('K8sクラスタへのデプロイ') {
steps {
script {
sh 'kubectl cluster-info --kubeconfig $KUBECONFIG'
sh 'sed s/__BUILDNUMBER__/$BUILD_NUMBER/ myweb.yaml > deploy_myweb.yaml'
sh 'kubectl apply -f deploy_myweb.yaml --kubeconfig $KUBECONFIG'
}
}
}
}
}
まとめ
これで、GitLabとJenkinsの連携の難関を超えて、Jenkins, Harbor, GitLab, Kubernetesを連携させて、GitOpsパイプラインを作ることができる。