gitlab runnnerのインストール・登録・挙動について正確に理解をしたいため、AWS環境を利用して確認をしてみました。
今回、runnner登録時はどちらから登録するのか?ポートは?というところと、具体的にどんなことができるのか?どう表現すればできるのか?というところが不明確であったため確認をしています。
AWS環境上で自動構築
Template を流すだけで環境ができるようにしました。
これによりまっさらな環境を誰でもいつでも構築して、挙動の確認ができます。
gitlab のサイズが900MB近くと大きいことと、インストールに時間がかかるため、だいたい20~30分ぐらい構築には時間がかかります。
気長に待ちましょう。
AWSTemplateFormatVersion: "2010-09-09" Description: gitlab Parameters: Subnet1: Type: String Description: Subnet IDs for VPC Default: 'subnet-xxxxxxxx' SecurityGroup: Type: String Default: 'sg-xxxxxxxx' Description: SecurityGroup Resources: gitlab: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-0ddea5e0f69c193a4" # Centos7, 7.9.2009, ap-northeast-1 InstanceType: t2.medium KeyName: dev-key NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref Subnet1 GroupSet: [ !Ref SecurityGroup ] Tags: - Key: "Name" Value: "dev-gitlab" UserData: Fn::Base64: | #!/bin/bash # hostname 設定 hostnamectl set-hostname gitlab echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # install yum -y install curl policycoreutils-python openssh-server vim bash-completion curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) EXTERNAL_URL="http://${public_ip}" yum install -y gitlab-ee shutdown -r now gitlabrunnner: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-0ddea5e0f69c193a4" # Centos7, 7.9.2009, ap-northeast-1 InstanceType: t2.micro KeyName: dev-key NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref Subnet1 GroupSet: [ !Ref SecurityGroup ] Tags: - Key: "Name" Value: "dev-gitlabrunnner" UserData: Fn::Base64: | #!/bin/bash # hostname 設定 hostnamectl set-hostname gitlabrunnner echo "preserve_hostname: true" >> /etc/cloud/cloud.cfg # install yum -y install curl vim bash-completion curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash export GITLAB_RUNNER_DISABLE_SKEL=true; yum -y install gitlab-runner shutdown -r now
構築後gitlab runnner 設定
構築が完了したらgitlab とgitlab runnner の紐付けを実施します。
- gitlab のWeb 画面の特定リポジトリで登録するための情報を取得します。(repository 内 setting CI/CD -> Runnners に記載)
- runnner 側のインスタンスで下記コマンドを実行
gitlab-runner register
CI/CD の実行
設定が完了したので実際にCI/CDが実行できることを試してみます。
一番簡単なecho するだけの例
git commit/push で見てやるとrunnner が動いているのが確認できます
.gitlab-ci.yml
job-name: script: - echo "This is test1" >> /tmp/test
もう少し複雑な例1: pushしてきたbranch がMarge できるレベルの品質かどうかを確かめる(CI的)
例えば特定のファイルを検索してsort uniq した結果重複行があるかをチェックします
#!/bin/bash result=$(cat targetfile | sort | uniq -d) if [[ -n "${result}" ]]; then echo "target file has duplicate row" exit 1 fi echo "target file is fine"
job-name: script: - bash duplicate_check.sh
というわけでスクリプト化してもっと複雑な例も作っていけそうです。
gitlab runnnerの挙動
gitlab runnnerの挙動としては、インストール場所に基づきますがrootでインストールした場合は下記のような場所にrepositoryに関するファイルが生成されます
/home/gitlab-runner/builds/yi84sU-f/0/root/repository_name/test.sh
感想
runnner は結構汎用性があり色々なことができそうです。
実装も今回bash でかきましたがそれ以外にも色々とコマンド実行をさせることで自動化を実現できます。
OSSでここまでできるというのは嬉しいですね。
AWSのインスタンスを停止したり起動したりする場合のメモ
IPが変わる可能性があります。そんな場合は下記を実行してください * /etc/gitlab/gitlab.rbを開き external url を書き換えてgitlab-ctl reconfigure