更新日:2025年4月15日
3分で読めます
JenkinsからGitLabへ移行するメリットと簡単に行える移行手順を分かりやすく解説します。
GitLabは、最も包括的なAI搭載のDevSecOpsプラットフォームです。GitLabには、ソフトウェアの計画、開発、セキュリティ確保、迅速なリリースに必要な機能がすべて揃っています。
プラットフォームを活用することで、さまざまなツールの統合(DIY DevOps)に苦労することなく、ソフトウェア開発ライフサイクル(SDLC)を実現できます。一方、Jenkinsはプラットフォームではないため、SDLCを実現させるには他のツールと組み合わせる必要があります。このようなDIY DevOpsのアプローチではツールチェーンの複雑さが増し、以下のようなデメリットが生じます。
こうした理由から、Jenkinsを使用する多くのチームがDevSecOpsプラットフォームへの移行を検討しています。より強力で、信頼性と安全性の高いソリューションを求めているなら、GitLabが最適です。GitLabは無料で使い始められ、組織のニーズに応じたさまざまなサブスクリプションプランが用意されています。GitLab のプランや機能の詳細については、価格ページをご覧ください。
このブログ記事では、以下について学べます。
他のツールからGitLab CI/CDへ移行を開始する前に、まず移行計画を立てる必要があります。移行計画は、期待値を明確にするための重要な技術的ステップです。CI/CDツールは、それぞれアプローチや構造、技術的な仕様が異なるため、単純にデータを1対1でマッピングできるわけではありません。適切な移行計画を立てることでもたらされるメリットを次に挙げます。
適切な移行計画を策定することで、業務への影響を最小限に抑えながら、GitLabへ徐々に移行できます。具体的には、JenkinsとGitLabを併用しつつ、一部のプロジェクトをGitLabに移し、Jenkinsの利用を徐々に減らしていくといった計画が考えられます。
移行計画では、効果的な変更管理プロセスを定める必要があります。デベロッパー、IT運用担当者、クラウド管理者、セキュリティ担当者、品質エンジニアなどの関係者は、GitLabの使用経験がなく、なぜあなたや経営陣がこの移行を決定したのかを理解していないかもしれません。
この移行によって影響を受ける人々に、以下の点を理解してもらう必要があります。
移行の影響を受ける各部門のへの影響を理解し、その変化を管理するには、以下の手順が必要です。
移行の開始時にこれらの要素が揃っていれば、成功へ向けたしっかりとした基盤を築けます。
移行を実施する前に、目標とそれを達成する方法をしっかりと把握しておく必要があります。たとえば、以下のような質問に対する答えを用意しておくことが重要です。
これらの質問に答えることで、移行の進め方、所要時間、どこから始めるべきかが明確になります。移行計画を立て、期待値や想定される課題をしっかり把握できたら、いよいよ移行プロセスの開始です。
移行計画を作成し、移行に関するすべての期待事項を整理できたら、GitLabのセットアップを開始できます。移行の前に推奨される前提要件をいくつかご紹介します。
GitLabの理解を深め、インスタンスの設定が完了したら、移行計画に沿ってJenkinsからGitLabへのプロジェクト移行を進めることができます。その際、GitLabインスタンスがGitLabのベストプラクティスやリファレンスアーキテクチャに従って適切に設定されていることを確認してください。
Jenkinsの主な欠点の1つは、SCMソリューションがないことです。Jenkinsを使用している場合、別のSCMソリューションにコードを保存し、そこにJenkinsからアクセスする必要があります。一方、GitLabにはSCMが組み込まれているため、Jenkinsからの移行に伴い、従来使用していたSCMソリューションからも移行でき、さらなるコスト削減につながります。
GitLabには、リポジトリやそのメタデータを簡単にGitLabへと移行できるツールが用意されています。プロジェクトをGitLabへ移行する際に活用できるインポーターは以下のとおりです。
各インポーターは、プロジェクトから異なる種類のデータをインポートします。インポーターによりGitLabへ移行できるデータの詳細については、インポートとプロジェクトの移行に関するるドキュメントを参照してください。さらに、グループやプロジェクトのインポートを自動化したり、組織のニーズに合わせたカスタムソリューションを構築したりすることも可能です。
GitLabには組み込みのインポーターが用意されており、リポジトリの移行は簡単に行えます。例として、GitHubからGitLabへリポジトリをコピーし、そのリソース(イシュー、プルリクエスト、マイルストーンなど)も含めて移行する方法をご紹介します。別のGitHubからGitLabへリポジトリを移行するには、以下の手順に従ってください。
これで、インポートされたプロジェクトがワークスペースに追加されます。GitHubからGitLabへの移行に関する詳しいガイドについては、こちらの動画をご覧ください。
リポジトリの移行が完了したら、JenkinsのパイプラインでGitLab内のJenkinsfileを活用できるように設定できます。これは、Jenkinsのパイプライン設定メニューから、新しくインポートしたプロジェクトのリポジトリURLを指定することで実行できます。
の方法は、移行の初期段階でもJenkinsの既存の機能を維持しながらGitLabと並行して使用できるため、CI/CD機能の移行作業中にサービスが中断されるのを防げます。
さらに、GitLab Jenkinsプラグインを活用することで、移行をスムーズに進めることができます。このプラグインを使用すると、GitLabからJenkinsのビルドをトリガーしたり、ビルドのステータスを取得したりできるようになります。
リポジトリの移行が完了したら、今度はJenkinsのパイプラインをGitLabへ移行できます。このプロセスは比較的シンプルですが、JenkinsとGitLabの両方の概念や構文を理解する必要があります。
Jenkinsには、パイプラインを定義するための構文として宣言型とスクリプト型の2種類があります。今回は、最も一般的に使用されている宣言型パイプラインからの移行方法を解説します。
このチュートリアルでは、Jenkinsfile(Groovy)とGitLab CI/CDの設定ファイル(YAML)を比較しながら、Go言語で書かれたマイクロサービスをビルド、テスト、デプロイする方法を分析します。その後、GitLabでパイプラインを有効化し、実際の動作を確認します。このパイプラインは以下の処理を行います。
以下に、JenkinsとGitLabのパイプライン定義とコメントを示します。実際のパイプラインの動作はMeow Migrationプロジェクトで確認できます。
では、Groovyで記述されたJenkinsfileを見ていきましょう。
// 宣言型パイプラインの
// トップレベルを定義します。
pipeline {
// ジョブ内で明示的に定義されていない場合に
// デフォルトで使用するエージェントを
// 指定します。
agent any
// 数値順に実行される
// ステージを定義します。各ステージは
// 1つのジョブのみを実行します。
stages {
// ステージの名前を定義します。
stage('build') {
// このジョブで使用する
// コンテナイメージを定義し、
//デフォルトの'agent any'を上書きします。
// 実行にはJenkins Docker
// プラグインの設定が
// 必要です。
agent { docker 'golang:alpine' }
// ステージが実行される際に
// 実行する処理の順序を
// 定義します。
steps {
sh 'go build -o bin/meow-micro'
sh 'chmod +x bin/meow-micro'
}
// ステージ完了後に
// 実行する処理を定義します。
post {
always {
// 他のジョブで使用するために
// ステージアーティファクトを
// 保存します。
archiveArtifacts artifacts: 'bin/meow-micro'
onlyIfSuccessful: true
}
}
}
stage('test') {
agent { docker 'golang:alpine' }
steps {
sh 'go test .'
}
}
stage('deploy') {
// このジョブを
// 実行するための
// 条件を定義します。この場合、
// stagingブランチでのみ
// デプロイジョブが実行されます。
when {
branch 'staging'
}
steps {
echo 'Deploying meow-micro to staging'
// buildステージで保存した
// アーティファクトを使用します。
sh './bin/meow-micro'
}
}
}
}
では、同じ機能をGitLabで作成する方法について見ていきましょう。
# ジョブ内で明示的に定義されていない場合に
# デフォルトで使用するイメージを
# 指定します。
default:
image: alpine:latest
# 実行するステージの順序を定義します。
# 各ステージには複数のジョブを含めることができます。
stages:
- build
- test
- deploy
# ジョブ名を定義します。
create-binary:
# このジョブが実行されるステージを定義します。
stage: build
# このジョブで使用するコンテナイメージを定義し、
# デフォルトの設定を上書きします。
image: golang:alpine
# ジョブ実行時に実行する
# 一連の手順を定義します。
script:
- go build -o bin/meow-micro
- chmod +x bin/meow-micro
# 他のジョブで使用するために
# ジョブのアーティファクトを保存します。
artifacts:
paths:
- bin/meow-micro
expire_in: 1 week
unit-tests:
stage: test
image: golang:alpine
script:
- go test .
# ジョブの実行後に実行するコマンドを
# 定義します。
after_script:
- echo "Tests Complete"
staging-deploy:
stage: deploy
# ジョブの実行前に実行するコマンドを
# 定義します。
before_script:
- apk update
script:
- echo "Deploying meow-micro to staging environment"
- ./bin/meow-micro
# このジョブが実行される
# 条件を定義します。この
# 場合、stagingブランチでのみ
# staging-deployジョブが実行されます。
rules:
- if: $CI_COMMIT_BRANCH == 'staging'
# buildジョブで保存されたアーティファクトを
# このジョブで使用できるようにします。
artifacts:
paths:
- bin/meow-micro
ご覧のとおり、JenkinsとGitLabの構文には多くの共通点があり、パイプラインの移行は比較的簡単です。ここでは基本的な例を紹介しましたが、両ツールの詳しい機能や概念の比較もぜひご確認ください。
JenkinsからGitLabへのマッピング方法を理解したところで、GitLabで同じ機能を持つパイプラインの作成を始めましょう。以下の手順でCI/CDを移行できます。
ファイルがマージされると、定義されたパイプラインが実行されます。プロジェクトページのビルド > パイプラインから、実行中のパイプラインを確認できます。今回はmainブランチで実行されているため、create-binaryとunit-testsのジョブのみが表示されます。staging-deployのジョブは、stagingブランチでのみ実行されます。
stagingブランチを作成すると、以下のパイプラインが開始されるのを確認できます。
ジョブをクリックすると、その出力を確認できます。
このように、create-binaryジョブで保存されたアーティファクトが、staging-deployジョブで使用されることが確認できます。これだけの手順で、JenkinsのパイプラインをスムーズにGitLabへ移行できます!
デプロイプロセスをよりシンプルにするために役立つポイントとして、以下の点を考慮することをおすすめします。
タスクをそのまま1:1でGitLabのジョブに移行しようとしない:既存のパイプラインが何を行っているのか、どのような問題を解決しているのかを整理し、理解する時間を確保することが重要です。
一部のJenkinsジョブは複雑すぎてすぐにGitLabに移行できない場合がある:そのため、GitLab Jenkinsプラグインを活用し、JenkinsのパイプラインをGitLabから直接起動し、結果を表示できるようにするとよいでしょう。これにより、一部の処理を徐々にGitLabに移行し、最終的にパイプライン全体をGitLabへ統合できます。
GitLabが提供する組み込みテンプレートを活用し、セキュリティスキャナーやコード品質チェックを最初から導入する:これにより、セキュリティのシフトレフトを行い、漏洩のリスクを低減できます。 また、CI/CDの設定を過度に複雑にしないようにし、すべての機能を一度に活用しようとするのではなく、コードをモジュール化し、複数の小さなステップに分けて導入するようにしてください。
モニタリングとガバナンスを最初から実装する。
GitLab Runner(Go)はJenkinsエージェント(Java)とは動作が異なる可能性があることを理解する:CPU使用率やメモリ消費量が異なる可能性があるため、時間をかけて比較しながら調整する必要があります。
自動スケーリングの導入を検討し、週末や業務時間外に不要なリソースをシャットダウンすることを検討する。
ジョブのコンテナ化を進め、アプリケーション開発をモダナイズする:現在ではJenkinsのジョブはコンテナ上ではなく、仮想マシン(VM)として動作するJenkinsエージェント上で実行されます。
このリストはすべての考慮事項を網羅しているわけではありませんが、移行を進めるうえで重要なポイントを押さえています。さらにサポートが必要な場合は、GitLabのプロフェッショナルサービスを活用し、移行プロセスをスムーズに進めることも可能です。
ここまでお読みいただきありがとうございます!本ガイドが、JenkinsからGitLabへ移行するメリットと手順を理解する助けとなれば幸いです。まだ迷っている方は、ぜひGitLabの無料トライアルでDevSecOpsプラットフォームの価値を実感してください!
さらに詳しく知りたい方のために、GitLabの機能やDevSecOpsプラットフォームのメリット、Jenkinsからの移行に関する情報を学べるリソースをいくつかご紹介します。
監修:小松原 つかさ @tkomatsubara
(GitLab合同会社 ソリューションアーキテクト本部 シニアパートナーソリューションアーキテクト)