10
9

More than 5 years have passed since last update.

会社にProxyを立てていて、その中にGitサーバーがたっていて、 AWS内のサーバーと連携させたいんだけど当然AWS側からは参照できないときに使えるTips。

Last updated at Posted at 2014-06-09

会社にProxyを立てていて、その中にGitサーバーがたっていて、
AWS内のサーバーと連携させたいんだけど当然AWS側からは参照できないときに使えるTips。

JenkinsをつかってProxy外のGitと同期をとる

ちょっと手間ですが、AWS内にJenkinsSlaveを構築することで、Jenkinsを仲介して(JenkinsのMaster-Slaveの関係をつかって)自動化することが可能です。

構成

Jenkins master (社内:Proxyない) --> Jenkins Slave (AWS VPC or Classic)

下準備1 Jenkins Master, Slave 設定

社内のJenkinsMasterから、AWS内のJenkinsSlaveサーバーにアクセスできるようにSSHの鍵設定、通常のJenkinsSlave用の設定を行い通常のJenkins Job連携(JobAが終わったらJobBをキックする)が動くことを確認しておきます。

下準備2 Git repository の初回転送

下記を参考にJenkins Slave サーバーの/opt/git 以下に 同期させたいリポジトリを転送しておく
事前に/opt/git を ssh user で rwx 権限を付けておくこと。

Git サーバー - サーバー用の Git の取得

ローカルPCで実施

$ git clone --bare my_project my_project.git
$ scp -r my_project.git user@git.example.com:/opt/git

Jenkins Slave で実施

$ cd /opt/git/my_project.git/
$ git init --bare --shared
Reinitialized existing shared Git repository in /opt/git/my_project.git/

Jenkins の設定

いよいよJenkinsの設定ですが、2つジョブを作ります
各Jobで実行するインスタンスを指定することができるのでそれぞれMaster,Slaveを指定します。
Master側のJob1.Master側で社内Gitサーバーを監視、更新をPullして、Slave側にPushする、Job2をキック
Slave側のJob2. 自サーバー内のOpt/gitから 最新をPullして 望みの処理を実施する。

Jenkins Master 側のJob例

#!/bin/bash -xe

#echo "## current dir:"
pwd
ls -al

git checkout $BRANCH_NAME
git branch -a
git pull

export http_proxy="http://proxy.XXXyourproxyserverXXX/";
export https_proxy="http://proxy.XXXyourproxyserverXXX/";

git push ec2-user@XXXyour_jenkins_slave_server.com:/opt/git/$REPOSITORY.git

Jenkins Slave側のJob例

以下では例として、chefポジトリの更新に反応して,
knife solo を実行させる簡単な例です。

#!/bin/bash +e

ls -al

echo "check already cloned?"
echo $REPOSITORY

if [ -d $REPOSITORY ]
then
  cd $REPOSITORY
  echo "##Do git checkout"
  git checkout $BRANCH_NAME
  echo "##Do git pull"
  git pull
else
  echo "## git clone"
  git clone /opt/git/$REPOSITORY.git
  cd $REPOSITORY
  echo "## git checkout"
  git checkout $BRANCH_NAME
  echo "## knife solo init"
  knife solo init .
fi

git branch -a
ls -al
cd $TARGET_DIR

echo '## start'
##berks install skipped 
chmod 755 ./echo_hosts.sh
./echo_hosts.sh | xargs -n 1 knife solo bootstrap

改善の余地

Slave側のJobの記述方法は通常のJenkinsのGitPluginを活用したほうがきれいになるでしょう。
やってることが分かりやすく伝えるためにスクリプトにしています。

10
9
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
10
9