6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jenkins + GitLab 連携のパイプライン

Posted at

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 をクリックすると、キーが表示されるのでコピーしておく。

ss-3-api.png

Jenkinsfileの取り込み

再びJenkinsに戻って、「新規ジョブの作成」->「パイプライン」からジョブのスペックを設定する。パイプラインに移動して、「Pipeline script from SCM」と SCMにGitを選択する。

リポジトリURLは、GitLabでクローンする時と同じように、プロトコルに ssh を指定する。ssh://git@gitlab.labs.local:2224/takara/test-internal.git

「認証情報」を「ビルドするブランチ」を設定する。

ss-1-pipeline.png

認証情報の取り込み

認証情報を追加する際に、次のように GitLab API token を選択して、先に取得したGitLabで生成したAPIをセットする。

ss-2-credential.png

パイプライン 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パイプラインを作ることができる。

6
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?