スキップしてメイン コンテンツに移動

jenkinsを利用してgitlabのソースアップデート時自動配布を設定したところgiipより難しい!

顧客の依頼でJenkinsをインストールしてWebサーバーにソース自動配布システムを作成しています。
まだ完了ではないので途中で書き込みアップデートが頻繁にある可能性があります。

まず、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!!


コメント

このブログの人気の投稿

コピペができないときチェックすべきこと! :: よく迷うUiPathのコツ

UiPath( https://uipath.com )はMicrosoft社のWWFを改良した製品なのでVisual Studioより初心者向けに使いやすくなっている。 しかし、初心者がそのまま使うにはかなりのハドルがある。 理由は基本開発者向けの開発ツールを無理やり便利に作ってみたとしても開発の概念と考え方がないと結構躓くことが多い。 そのなかで私もよく迷ったりしていることの一つを整理しとく。 基本Activityはすぐコピぺができるので多数のUiPath Studioを開いて開発してたりする。 ここでコピペをしても反応ないときがよくある。 この場合はこれをチェックすること! 1.Sequenceがなく一つのActivityしかないところにはペーストできないのが多い。 例えば、ifの処理ボックスにはSequenceが最初はない。 そのボックスに一つのActivityはペーストできるのに2個目からはなぜか反応ない。 それで分からないまま新しいActivityを追加してたりしたが、 あそこにSequenceを入れたら解決ができるのだ! 2.正常にペーストできるはずのところに反応ない。 この場合はPackageが合わなくペーストが効かないケースが多い。 DESIGN>Manage Packagesをクリックしてコピー元のパッケージにインストールされているのにコピー先にインストールされてないパッケージを探す! パッケージを一々見るのが難しい!と思ったら メモ帳からファイルがあるフォルダにあるproject.jsonファイルを開いてみる! あそこにJSONの形式でインストールされたパッケージが見えるので比較しやすくなる! ちなみにコピペをすると変数の宣言が大変だと思うが、 そこでもコツがあるのだ! 変数の宣言はなるべく細かくしてSequence単位で管理できるようにする。 全てに影響がある変数はしょうがないから一番広く宣言するけど。 初心者向けの説明だと、 Variablesというところをクリックして変数を開いたらScopeという範囲が見える! 大体Sequenceボックスの名前を変えてないのでSequenceがすらりと表示されてるはずが、Sequenceボックスの名前を付けてたら見やすくなる。 あ

英語をより楽に勉強できる方法

英語ができなくて良い機会が失われた経験があるでしょう。 GoogleさんもMicrosoftさんも英語で面接をしてます。 私がエンジニアですが技術より言語の学びが優先だと思います。 知り合いの中で技術は低いが英語が上手い人が私より良い道を歩いてます。 それは会話ができなければ技術も通じないとのことでしょう。 それで色々お試ししましたところ 情報を公開しようとしてます! まず、 Khan Academy( https://www.khanacademy.org/ )に入会! これはSalman Khanという人が自分の親戚に数学を教えるために試したやり方が色んな人が参加してグーグルさんとマイクロソフトさんが投資をした 完全無料教育サービス です。 しかし、これは英語でしか話してないので初心者の方には無理があるでしょう。 それでも、この記事をお読みになられた方は基本的な文法は学んだ方だと考えときます。 そして TEDアプリ( https://www.ted.com/ ) をダウンロード。 日本語の字幕がある映像の中で自分の好みの映像を選んでください。 有名なスピーカが話したことが多いので話し方など良い勉強になります。 次は MeetUp( https://www.meetup.com/ja-JP/ ) でしょ。 英会話グループを探して加入。 自分のレベルに合わせて参加してら良い友達もできるし勉強にもなります。 電車で単語ばっかり暗記している方が見つかりますが、 それも悪くは無いけど効率はどうかと思います。 やはり勉強は楽しく!自分の好みでは無いと! 映画も良いしドラマも良いです。それともゲームとか旅行もあるでしょう。 自分の趣味から始めるのが大切だと思います。 もしドロンが趣味だとしたらわざわざググってみる。 そして英語のページから探すんです。 最初は無理があるけど好きなイメージなどが見つかったら読みたいでしょ? そのページをスクリーンショットかプリントでも良いです。 その文書の単語を探して読んでみるのが第一歩ですね。 最初は辛いでしょ。 私の場合には最初には単語10個だけ探しました。 1日10個だけ辞書から探して残りは捨てる。 さらに10個をその場で暗記してそれで終わり。 翌日3~4個し

面倒くさいORACLEの文字化け状況

ORACLEはそもそもUTF-8をサポートしてほかの言語はサポートはしているって書いてますが親切ではないようです。 現在サーバー側は昔からUS7ASCIIに設定して日本語を入れてしまい、データは7ビットASCIIモードで読み取りながら日本語のコートがOS側とクライアント側で変換しない必要があります。 クライアント側で文字化けの解決にはNLS_LANGの設定が効くクライアントが必要ですが、一部の有料クライアントにはサポートするようです。 接続構造は参考に https://www.oracle.com/technetwork/jp/content/charcterset-250314-ja.pdf の19スライドのように クライアントからNLS_LANGをUS7ASCIIに設定しても その設定した言語にもらったUTF-8のデータをクライアントが変換すると NLS_LANGを設定しても意味がないようです。 ORACLE SQL Developerがこの様です。 ODBCと直接接続は必ずUTF-8に変換してしまうのでUS7ASCIIになっているDBからはクライアントをいくら変換しても文字化けのままです。 必ずOCI接続を通じてクライアント側から読み取らないとUS7ASCIIは勝手に変換されますね。 この全ての条件が満たした無料クライアントはA5mk2の2.9.1バージョンだけですね。 A5MK2 ver.2.9.1 : https://a5m2.mmatsubara.com/download/a5m2_2.9.1_x64.zip 2.9.1 バージョンでサーバーを設定する場合Uicode変換を強制に無視するオプションがあります。 多分このバージョンの時点ではUTF-8をメインにして設計したDBが少なかったから文字化け対応のためできたオプションでしょう。 しかし、A5mk2の新しいバージョンにもまた結果の変換をしないオプションがなくなって文字化けしてしまいます。開発者はもうUTF-8ではないDBはないと思ってるでしょう。まだまだ残ってますよ~。 クライアント側からの変換などに参考になればと思います! まだ直接お仕事になさってますか? もう遅いです!ソフトウェアロボットにお仕事を任せてどの位自分の作業分量が減ってるかをご確認ください! https://talklowy-jp.b