GitLabとGitLab_CIとJenkinsはそれぞれ別のユーザーで実行することが想定されています。GitLab_CIに至ってはgitlab_ciユーザーに加えてビルドを実行するgitlab_ci_runnerユーザーも必要です。
[table id=1 /]
この状態でこれらを同一サーバーにインストールすると、GitLabからプロジェクトのコードをcloneするときにAccess denied になります。パーミッションエラーです。それぞれのアプリケーションはそれぞれのホームディレクトリ以下で動いているので, 同一サーバ内だとパーミッションエラーになるわけです。
あわせて読みたい:
別のサーバにインストールできればいいのですが、唯一虎の子のサーバしかないということも多々あると思います。そういうときには全部ユーザーgitで動かしちゃえばオールオッケーです。
GitLab_CI , GitLab_CI runner
- config/database.ymlのユーザーをgitに (GitLab_CI runnerは無い)
- /etc/init.d/gitlab_ciの
- APP_USERをgitに
- GitLab_CI runnerはさらにAPP_ROOTを/home/git/gitlab-ci-runnerに
変更すればオッケーです。
Jenkins
Jenkinsを別ユーザで動かす – kotaroito’s notes
を参考にして、/etc/sysconfig/jenkinsでユーザーとホームディレクトリを変更し、/var/log/jenkins/, /var/cache/jenkins/の権限を変更します。
JenkinsでGitLabのプロジェクトをビルドするには、Jenkinsプロジェクトの設定を
こんな感じにすることでcloneできるようになります。8079はGitLabを動かしているポート番号です。
ひとまず動くようになるまではこれでオッケーですが、JenkinsでGitLabへのpushを景気としてビルドするにはもうちょっと手間が必要です。JenkinsにはGitLabプラグインというのがあるのですが、Repository URLに書いたパスにhttpでアクセスすることでpushイベントを登録するみたいで、今回のように絶対パスでGitLabリポジトリを登録した場合はpushに反応してくれませんでした。ですのでJenkinsに直接curlすることでhookすることにします。
curl http://localhost:8088/job/hogehoge/build することでJenkinsのhogehogeプロジェクトがビルドできることをまず確認しましょう。8088はJenkinsの動いているポートです。
そのためにgitのhooks/post-update機能を使います。
cd /home/git/repositories/oreore/hogehoge.git/ でoreoreさんのhogehoge.gitリポジトリに移動し、hooks/post-updateを有効にします。
? mv hooks/post-update.sample hooks/post-update ? chmod a+x hooks/post-update ? vi hooks/post-update
hooks/post-updateは次のように変更します。ハイライトは追加した行
# # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". curl -s http://localhost:8088/job/hogehoge/build exec git update-server-info
これでGitLabのhogehogeプロジェクトにpushするとcurl -s http://localhost:8088/job/hogehoge/build が実行されるようになります。
それでは素敵なおじさんライフを!
コメント