顧客の依頼でJenkinsをインストールしてWebサーバーにソース自動配布システムを作成しています。
まだ完了ではないので途中で書き込みアップデートが頻繁にある可能性があります。
まず、gitlabとJenkinsのインストールは難しくないと思い飛ばします。
gitlabのソース配信設定にはrsyncを使いました。
開発ソースは3バージョンに分けてます。
gitlabは顧客の開発部から設定するので放置。
開発ソースをアップしてテストして完了したらmasterにマージし、最終テストを行います。問題無かったらreleaseをします。
その時、releaseだけは手動で配信、developとmasterは自動でWebサーバーに配信したいという旨です。
ということでJenkinsからプロジェクトを作成します。
まずはCredentialsを作成
Add Domainをクリックしてドメイン作成
Domain Name : git.littleworld.net
作成されたドメインの詳細に入ったら左側にAdd Credentialsが出てきます。(探すの大変!)Add CredentialsをクリックしてCredentialsを作成します。
作成したら次はプロジェクトです。
もしrsyncがインストールされなかったらインストールしてください。コマンドですぐインストールできるのでパスします。
それで完了!
やってみましょう!
作成したjDepServiceをクリックして詳細から左のBuild Nowをクリックしてみます。しばらくすると下に#1という実行結果が出ます。青色だったら成功で赤色だったら失敗です。
番号をクリックして左のConsole outputをクリックするとConsole表示が見えます。
それを元に修正が必要なのを修正したらOKですね。
大体の問題はサーバー間の通信権限の問題が多いです。
rsyncのためにpubkeyを作成してお互いにパスワードなしで接続する設定が必要ですがこれも他の記事のリンクをします。
jenkins公式 Adding global credentials
https://jenkins.io/doc/book/using/using-credentials/#adding-new-global-credentials
rsync + sshによるリモート同期
https://qiita.com/hirohiro77/items/2e2e9efb25486d8a9870
自動配布の設定はこの記事をご参考ください。
https://talklowy-jp.blogspot.com/2019/01/jenkinsgitlab.html
----
同じ作業をgiipで設定してみます。
giipはインストールが必要ないのでサーバー費用とか管理の手間がかかりません。
セキュリティの問題が懸念していたらgiipにはサーバー上のスクリプトを起動するだけでセキュリティー情報が入っているメインスクリプトはサーバ側に入れとけばOKです。
giipの原理はスケジュールとメッセージキューだけです。
一番いいところはサーバーからOutbound 80ポートだけ開けとけば(基本開いてるので設定変更必要なし)上記のような難しい作業が必要ありません。
そしてMarketplaceから購入するのがなければ無料でずっと使えます。
そしてjenkinsの場合git cloneを使うとしてもjenkinsからコマンドを投げる必要があるのでpubkeyを作成しなければなりません。なのでrsyncとあまり変わらないのでrsyncを使ったんですが、giipはもともとgiipサーバーからは何もやってないので簡単に設定ができちゃうんです。
まず、各サーバー側からgit cloneを行うスクリプトを作成します。giipにアップしてもいいですが、セキュリティーを心配している皆さんのためにWebサーバーに作成します。
Webサーバー側のgitclone.shファイルです。
終わりです。超簡単でしょ?
もしgiipのKVS(Key value store)機能を利用してログを記録したいと思ったら次のコードを下に入れます。
valueをJSON形式に合わせて適当にいじったらそのままテーブルになって表示されます!
secret keyとlssnに関しては古いバージョンですがQuickstartマニュアルがあります。
https://github.com/LowyShin/giip/wiki/Quick-Start-Manual
そしてこれを実行するjenkinsのjobみたいなのを作成します。
http://giipweb.littleworld.netからWebサーバが登録されている前提で書きます。
Webサーバ登録までは慣れれば1分程でできる簡単なことなのでまずはQuickstartマニュアルでやってみてください。新しいUIのバージョンは準備中;;
上記で作ったgitclone.shを実行するだけでOKです。
まずScriptを作成します。
左メニューから「自動化>スクリプト」を選択します。
「スクリプト登録」ボタンを押します。
セーブしてスクリプトリストから作成したスクリプトが見えたらクリックして詳細に入ります。詳細から下を見るとサーバーが表示されます。(shに登録したのでLinuxサーバしか表示されません)サーバーのリストからWeb01~03をチェックし、スケジューラを起動するかスケジュールなしで実行状態をNOにして「作業登録」ボタンをクリックします。
これでお終い。
原理はgiipwebから作成したsh gitclone.shを実行せよ!との内容がJobとして登録しています。それを周期的にgit cloneを実行させて同期することとサーバリストから強制実行ボタンを押して実行するのも可能です。
これはPull形式のMQ(Message Queue)なので次の実行まで役0〜2分程掛かります。
それでもしKVSに記録したら左のKVSメニューとかサーバーの詳細画面で最後のログが表示されます。(無料バージョンは3日後ログが消えます。)
もしgitlabのwebhookを使ったりMD5の比較で変更があったら実行するなどの条件が自由にScriptで作成できるのでJenkinsより柔軟ですがその分スクリプトのスキルが必要ですね。まあ、Jenkinsを使ってみたんだけどJenkinsもなかなか初心者には向いてないのでJenkinsが使えるくらいならgiipはより自由に使えると思いますよ!
giip APIをスクリプトで簡単に呼び出しするのができて、サーバをチェックするスクリプトなどを作成して条件が満たしたらEnforceQueueAPIなどで他のサーバのスクリプトを強制実行することもできます。
Enforce Queue API:https://github.com/LowyShin/giip/wiki/Enforce-Queue
一番のメリットはJenkinsみたいにJenkinサーバーに権限が集中してハッキングされたらお終いではなく各サーバーが自分のセキュリテイポリシーを守った上にサーバーからの作業がログイン無しでできることです。これは画期的な発想ではないでしょうか!
ということで、
giipを試しているのは如何でしょ?
ホームページ:http://giipweb.littleworld.net
Do not login your server any more!!
まだ完了ではないので途中で書き込みアップデートが頻繁にある可能性があります。
まず、gitlabとJenkinsのインストールは難しくないと思い飛ばします。
gitlabのソース配信設定にはrsyncを使いました。
gitlabサーバー:gitlab.littleworld.net jenkinsサーバー:jenkins.littleworld.net 本番Web01~03サーバー:web01.littleworld.net ~ web03.littleworld.net 開発Web:develop.littleworld.net StagingWeb : master.littleworld.net
開発ソースは3バージョンに分けてます。
develop master release
gitlabは顧客の開発部から設定するので放置。
開発ソースをアップしてテストして完了したらmasterにマージし、最終テストを行います。問題無かったらreleaseをします。
その時、releaseだけは手動で配信、developとmasterは自動でWebサーバーに配信したいという旨です。
ということでJenkinsからプロジェクトを作成します。
まずはCredentialsを作成
Add Domainをクリックしてドメイン作成
Domain Name : git.littleworld.net
作成されたドメインの詳細に入ったら左側にAdd Credentialsが出てきます。(探すの大変!)Add CredentialsをクリックしてCredentialsを作成します。
Kind:username with password Scope : global username : gitlab接続用のID password : gitlab接続用のpassword ID : 自動生成されるので空欄 Description : username と一緒に表示されるので書いといたら使いやすい
作成したら次はプロジェクトです。
Job名:jDepService Build > Source > gitを選択 Repository URL : http://gitlab.littleworld.net/keepcool/project01.git Credentials : keepcool branch specifier : release Build > Add execute shell 選択すると入力欄が出てきます。 command : rsync -auz -e "ssh -i /var/lib/jenkins/.ssh/deploykey -p 9922" /var/lib/jenkins/workspace/jDepService/ keepcool@develop.littleworld.net:/home/keepcool/html
もしrsyncがインストールされなかったらインストールしてください。コマンドですぐインストールできるのでパスします。
それで完了!
やってみましょう!
作成したjDepServiceをクリックして詳細から左のBuild Nowをクリックしてみます。しばらくすると下に#1という実行結果が出ます。青色だったら成功で赤色だったら失敗です。
番号をクリックして左のConsole outputをクリックするとConsole表示が見えます。
それを元に修正が必要なのを修正したらOKですね。
大体の問題はサーバー間の通信権限の問題が多いです。
rsyncのためにpubkeyを作成してお互いにパスワードなしで接続する設定が必要ですがこれも他の記事のリンクをします。
jenkins公式 Adding global credentials
https://jenkins.io/doc/book/using/using-credentials/#adding-new-global-credentials
rsync + sshによるリモート同期
https://qiita.com/hirohiro77/items/2e2e9efb25486d8a9870
自動配布の設定はこの記事をご参考ください。
https://talklowy-jp.blogspot.com/2019/01/jenkinsgitlab.html
----
同じ作業をgiipで設定してみます。
giipはインストールが必要ないのでサーバー費用とか管理の手間がかかりません。
セキュリティの問題が懸念していたらgiipにはサーバー上のスクリプトを起動するだけでセキュリティー情報が入っているメインスクリプトはサーバ側に入れとけばOKです。
giipの原理はスケジュールとメッセージキューだけです。
一番いいところはサーバーからOutbound 80ポートだけ開けとけば(基本開いてるので設定変更必要なし)上記のような難しい作業が必要ありません。
そしてMarketplaceから購入するのがなければ無料でずっと使えます。
そしてjenkinsの場合git cloneを使うとしてもjenkinsからコマンドを投げる必要があるのでpubkeyを作成しなければなりません。なのでrsyncとあまり変わらないのでrsyncを使ったんですが、giipはもともとgiipサーバーからは何もやってないので簡単に設定ができちゃうんです。
まず、各サーバー側からgit cloneを行うスクリプトを作成します。giipにアップしてもいいですが、セキュリティーを心配している皆さんのためにWebサーバーに作成します。
Webサーバー側のgitclone.shファイルです。
#!/bin/bash git clone http://gitlab.littleworld.net/keepcool/project01.git
終わりです。超簡単でしょ?
もしgiipのKVS(Key value store)機能を利用してログを記録したいと思ったら次のコードを下に入れます。
DT=`date +%Y%m%d%H%M` sk="<secret key>" type="lssn" key="<logical server sn>" factor="git clon job history" value="{\"Date\":\"$DT\",\"JobName\":\"executed git clone job\"}" qs="sk=$sk&type=$type&key=$lssn&factor=$factor&value=$valueJSON" wget "http://giipapi.littleworld.net/API/kvs/put?$qs"
valueをJSON形式に合わせて適当にいじったらそのままテーブルになって表示されます!
secret keyとlssnに関しては古いバージョンですがQuickstartマニュアルがあります。
https://github.com/LowyShin/giip/wiki/Quick-Start-Manual
そしてこれを実行するjenkinsのjobみたいなのを作成します。
http://giipweb.littleworld.netからWebサーバが登録されている前提で書きます。
Webサーバ登録までは慣れれば1分程でできる簡単なことなのでまずはQuickstartマニュアルでやってみてください。新しいUIのバージョンは準備中;;
上記で作ったgitclone.shを実行するだけでOKです。
まずScriptを作成します。
左メニューから「自動化>スクリプト」を選択します。
「スクリプト登録」ボタンを押します。
スクリプト名:gitclone execute スクリプトタイプ:sh スクリプト説明:git clone 実行します。 スクリプトソース: #!/bin/bash sh gitclone.sh
セーブしてスクリプトリストから作成したスクリプトが見えたらクリックして詳細に入ります。詳細から下を見るとサーバーが表示されます。(shに登録したのでLinuxサーバしか表示されません)サーバーのリストからWeb01~03をチェックし、スケジューラを起動するかスケジュールなしで実行状態をNOにして「作業登録」ボタンをクリックします。
これでお終い。
原理はgiipwebから作成したsh gitclone.shを実行せよ!との内容がJobとして登録しています。それを周期的にgit cloneを実行させて同期することとサーバリストから強制実行ボタンを押して実行するのも可能です。
これはPull形式のMQ(Message Queue)なので次の実行まで役0〜2分程掛かります。
それでもしKVSに記録したら左のKVSメニューとかサーバーの詳細画面で最後のログが表示されます。(無料バージョンは3日後ログが消えます。)
もしgitlabのwebhookを使ったりMD5の比較で変更があったら実行するなどの条件が自由にScriptで作成できるのでJenkinsより柔軟ですがその分スクリプトのスキルが必要ですね。まあ、Jenkinsを使ってみたんだけどJenkinsもなかなか初心者には向いてないのでJenkinsが使えるくらいならgiipはより自由に使えると思いますよ!
giip APIをスクリプトで簡単に呼び出しするのができて、サーバをチェックするスクリプトなどを作成して条件が満たしたらEnforceQueueAPIなどで他のサーバのスクリプトを強制実行することもできます。
Enforce Queue API:https://github.com/LowyShin/giip/wiki/Enforce-Queue
一番のメリットはJenkinsみたいにJenkinサーバーに権限が集中してハッキングされたらお終いではなく各サーバーが自分のセキュリテイポリシーを守った上にサーバーからの作業がログイン無しでできることです。これは画期的な発想ではないでしょうか!
ということで、
giipを試しているのは如何でしょ?
ホームページ:http://giipweb.littleworld.net
Do not login your server any more!!
コメント
コメントを投稿