最近弊社ではソース管理にGitLabを使い始めた。
折角なので、GitLab CIを使ってみた。
まだまだ初心者中の初心者なので、ご指摘等ございましたらぜひお願いします。
やってみたのは下記内容
・サーバにGitLab Runnerを仕込み単純にGitから最新ソースを取得する
・Doker imageからAWS Elastic Beanstalkに更新をかける
・Doker imageからAWS S3経由でLambdaに更新をかける
・サーバにGitLab Runnerを仕込み単純にGitから最新ソースを取得する
CentOSにて実行
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install -y gitlab-runner
でGitLab runnerを最新ソースを取得したいサーバにinstall
gitlab-runner register
で、いくつか質問されるので、順番に回答する
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/)
→GitLabのURL
Please enter the gitlab-ci token for this runner:
→GitLab画面
プロジェクト → CI/CD → Runner
画面に記載されているTokenを入力
Please enter the gitlab-ci description for this runner:
[ip-172-31-43-84.ap-northeast-1.compute.internal]:
→なんか、一意の判断
Please enter the gitlab-ci tags for this runner (comma separated):
→tagが必要であれば入れる
Please enter the executor: ssh, docker+machine, kubernetes, docker, docker-ssh, parallels, shell, virtualbox, docker-ssh+machine
→種類を入力、今回はshellで作成
ps aux | grep gitlab
→このコマンドで、GitLab CIがどのユーザで実行されるかを確認する
今回はrootで強制的に実行したかったので、
gitlab-runner uninstall
gitlab-runner install -user root
gitlab-runner restart
の3つを実行し、再度ユーザ確認すると、rootに変わっている
SSHログイン時に実行するコマンドを定義
yum install expect
→installを行う
vi ~/.bash_profile
→でファイル編集
記載内容
—
eval `ssh-agent`
# 秘密鍵ファイル
KEY_FILENAME='id_rsa'
# パスフレーズ
PASSPHRASE='password'
expect -c "
set timeout -1
spawn ssh-add $HOME/.ssh/$KEY_FILENAME
expect {
\"Enter passphrase for\" {
send \"$PASSPHRASE\r\"
}
}
expect {
\"denied\" { exit 1 }
eof { exit 0 }
}
"
—
で、該当プロジェクトの直下に
.gitlab-ci.yml
を作成
—pullの場合—
stages:
- deploy
deploy:
stage: deploy
script:
- id
- ssh-add -l
- ssh -vT git@gitlab.com
- cd /var/www/html/
git pull origin master:master
only:
- master
tags:
- tags_name
—
で、とりあえずmaster Push時にだけ反応するように設定
developだけであればdevelopに変更すればOK
次回は
・Doker imageからAWS Elastic Beanstalkに更新をかける
・Doker imageからAWS S3経由でLambdaに更新をかける
を書きます