GitLab-Runnerからssh通信で、ファイルを送れるWebサーバを構築する話

GitLab runnerが動いてくれない環境… sshポートとhttp(s)のみの公開環境などでCDするのはどうすれば良いかな?何て考えてみました。
正直、xUnitの実行結果レポートHTMLをチャックする方法を簡単に考えてみました。

簡単な図を書いておきますと

PlantUML Syntax:
develop -> GitLab : git push
GitLab -> GitLab : job
GitLab -> GitLab_runner :
GitLab_runner -> GitLab_runner : build
GitLab_runner -> www : ssh
www -> browser : http

ま、シンプルに開発者のgit pushを実行すると、browser用のhtmlページができあがりました

webページをサブディレクトリに分けることで、いろいろなページがリリースされます。git pushとjobの間にマージリクエストを入れることで、1 commitだけでページを作るとか言う微妙な物もありませんし。
webページの実行前にはxUnitが走りますので、便利です

今回作ったサンプルプロジェクトはすごくシンプルです

はい、index.htmlが入っているpublicがあるだけですね。README.mdはアクセスurlとかメモっておきます
.gitlab-ci.ymlはCIを動かすための指示書です

stages:
  - report
deploy:
  stage: report
  tags:
    - www
  script:
    - scp -r -P 18822 ./public/* runner@192.168.1.203:/usr/share/nginx/html/

はい、bash読めない人は困りますが、単純です。

全部送るのは困るので今回はrunnerをtagに絞っています。

tagをwwwに移動した場合にこのスクリプトを動かすという感じです。
gitのtag移動にはコツがいるので後で書きます。
削除して、コミットして、追加してコミットって感じが普通の使い方です;;

次にサーバですが、runnerが走っているサーバから公開サーバの18822ポートsshでscpしてファイル内容をnginxのルートに突っ込んでいます

Runnerをtag固定にすること

はじめはGitlab-runnerを構成します…

はい、前回QNAPでのrunnerスクリプトを紹介しましたので割愛です

http://35.78.51.61/archives/2139

タグ付きのレジスタを作成します

# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=36 revision=8fa89735
version=13.6.0
Running in system-mode.


Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.203:9080/
Enter the registration token:
tsa_DpDrZ9g_nsPLLvxw
Enter a description for the runner:
[d2c5b2137461]: cd_web_ruunner
Enter tags for the runner (comma-separated):
www
Registering runner... succeeded                     
runner=tsa_DpDrEnter an executor: virtualbox, docker+machine, kubernetes, docker-ssh, shell, parallels, ssh, docker-ssh+machine, custom, docker:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Enter tags… にて、wwwを指定しました。
後で、タグは修正できますので、ミスってもOKです
今回は、プロジェクトではなくグループに作りました。

Webサーバを立ち上げよう

公開のWebサーバ SSHで入れ込むサーバの構築をします。
今回の構成は、こんな感じで、QNAPのdockerで作成しました

http : 18880
ssh : 18822

Dockerに関してはnginx:latestで作りましたw

作成しましたら、SSHサーバを導入しましょう

# apt-get update
# apt-get -y upgrade
# apt-get -y install ssh       
# service ssh restart   

次に、sshで接続するユーザを作成します

# groupadd develop
# usermod -G develop runner
# usermod -G develop apache
# passwd runner

GitLab-runnerからのパスワードレスな接続を行う

鍵を登録することでパスワードがなしで登録できます
ので、ユーザ変更して、パスワードを作成して、Webサーバに送ります

# su gitlab-runner -
$ ssh-keygen -t rsa -b 4096
$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 18822 gitlab-runner@192.168.1.203 

パスワード聞かれますので、入れればOKです

これでパスワードレスで接続可能になりました

実際に実行してみる…

OKになりました!