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

投稿

CIサービス(アプリケーション)一覧

最近はCI用のサービス(アプリケーション)もクラウド上で提供されていたり、レポジトリサービス側から提供されていたりとずいぶん状況が変わってきました。 2012年ごろにCIの記事を書いたときに比べて格段の進化です! 今回の投稿では、最近利用できるCIサービスについてまとめてみました。随時情報は更新していきます。 名称 公式サイト 開始日 特徴 Jenkins https://www.jenkins.io/ 2011年2月20日 もともとはHudsonというプロジェクト。 オリジナルの開発者は日本人の川口耕介氏 (今もテストまわりの改善のために活躍されています!)。 歴史が長く、情報も豊富。 Pluginがとのかく豊富。 Pipeline機能があり、複雑なビルド処理もJenkinsfileを定義することにより管理できる。 Jenkinsfileには、Declarative PipelineとScripted Pipelineの2種類の書き方がある。 Teamcity https://www.jetbrains.com/teamcity/ 2006年10月2日 Jetbrains社提供。IntelliJ、PHPStorm、ReSharperなどのIDEの提供で有名な会社。 ローカルの変更をコミットせずに実行するRemote Runという機能もあり。 Bamboo https://www.atlassian.com/software/bamboo 2008年7月24日 Atlassian社提供。JiraとかConfluenceで有名な会社。 Circle CI https://circleci.com/ 2011年 クラウドとインストールバージョンの両方が提供されているが、クラウド版の方が有名。 GitLabやBitBucketなどの

Windowsでスタートアップのプログラムがある場所一覧

Dell製のパソコンで標準のWindows以外のプロセスが、スタートアップ時に起動するので、無効化しようとしたのですが、設定を変更するべき場所がわからなかったので備忘録としてメモ。 Task ManagerのStart Upタブ Windowsのサービス (Windowsのサーチボックスにserviceとか打てば出てきます)。 Task Schduler (WindowsのサーチボックスにTask Schedule とか打てば出てきます)。

GitLabのバックアップ設定

GitLabのデータのバックアップは、メインデータと設定ファイルの2つをバックアップする必要があります。 メインデータ 公式ドキュメント デフォルトのバックアップ先ディレクトリ: /var/opt/gitlab/backups /etc/gitlab/gitlab.rb内のgitlab_rails['backup_path']で変更可能 下記のようなバックアップファイルが生成される。ファイル名は、{epoch表記時間}_{年}_{月}_{日}_{バージョン}_gitlab_backup.tar -rw-------. 1 git git 33246 Dec 12 13:59 1639317570_2021_12_12_13.7.5_gitlab_backup.tar 設定ファイル 公式ドキュメント バックアップ先ディレクトリ: /etc/gitlab/config_backup 主なバックアップ対象ファイル /etc/gitlab/-secrets.json /etc/gitlab/gitlab.rb バックアップ例 -rw-------. 1 root root 267000 Dec 12 13:59 gitlab_config_1639317570_2021_12_12.tar GitLab1の公式サイトにも記載があるが、メインデータのバックアップと一緒に設定ファイルがバックアップされない理由は、設定ファイルに暗号化キーなどの機密情報が含まれているため。セキュリティ上は、バックアップも別々に保存することが好ましい。 バックアップの設定方法 バックアップ用の処理をbashにまとめてみました。 #!/bin/bash # backup gitlab main data: /var/opt/gitlab/backups gitlab-backup create STRATEGY-copy # backup gitlab config files: / etc/gitlab/config_backup giotla-ctl backup-etc # remove backup files olde

ダイソーで買った200円のドライバーセットでHDDを分解

HDDの処分 最近は個人情報の問題もあって、HDDを処分する前にちゃんとデータの消去を気にすることも多くなってきました。消去方法としては大きく分けて下記の3つがあります。 データ消去ソフトでフォーマット HDD内部のプラッタを物理破壊 データ消去を行ってくれる専門の業者や家電量販店(Sofmapやビックカメラで実施していると思います。費用発生。)に持ち込み。 データ消去ソフトでのフォーマットは簡単ですが、欠点として「フォーマットに時間がかかる」「セクタ破損などで中途半端に壊れたディスクのフォーマットができない」などがあります。 またHDD内部のプラッタの物理破壊については、HDDを分解するために、通常のプラスやマイナスドライバーではなく、星形ネジに対応したトルクスドライバーが必要とのこともあって、少し面倒です。 筆者は今回、今後もHDDの廃棄をするだろうなあと思い、思い切って自分で分解して廃棄することにチャレンジしてみました。(家電量販店に持って行くよりも安くできないかというどケチ丸出しですw) HDDの星形ネジ こんなやつです。ちなみに写真はSeagateのST2000DL003というHDDで撮影しました。 トルクスドライバー というわけで、分解のために Amazonでトルクスドライバー を探しました。 調べると T8のもだと使えそう とのことで、いろいろと物色。 セットのものとか T8一本で立派なやつとか 色々あったのですが、HDD壊すだけで800円かぁ(←どケチ)、と思って購入を躊躇。 ネット上で調べると100円ショップのダイソーでも、トルクスドライバーを販売しているとの情報をキャッチ!近所のダイソーに行って、探したところ星形のヘッド交換に対応した精密ドライバーセットがありました。 プラスが10種類、マイナスが8種類、六角が6種類、星形が6種類(今回ほしかったもの)のセットで、何とお値段税抜き200円!、税抜き200円!と安かったので、ダメもとで購入しました。 結論から言うと 買って大正解 でした。 ダイソーの精密ドライバーセット こんな商品です! 星形対応のヘッドを装着するとこんな感じ。ドライバーのグリップもゴムで滑らない様になっていて使いやす

MySQLのinsertとupdate用のPDOのPrepared Statementを生成するPHPのプログラム

PHPでMySQLのinsertとupdateで使えるPDOのprepared statementを生成するプログラムを書いてみました。使用頻度の高そうなパターンのSQLを生成することを目標にしてプログラムを書きました。 SQLBuilderクラス メインとなるクラスです。SQLBuilderクラスの内部で使っているColumnインタフェースとColumnインタフェースを実装したBindableColumn、FixedValueクラスは、SQLBuilderクラスの内部のみで使用することを想定しているので、SQLBuilder使用時に意識する必要はありません。 <?php class SQLBuilder { private string $table; /** * @var Column[] */ private array $columns = []; public function __construct($table) { $this->table = $table; } public function add($column, $type): self { $this->columns[] = new BindableColumn($column, $type); return $this; } public function addFixedValue($column, $value): self { $this->columns[] = new FixedValue($column, $value); return $this; } public function buildStatementForInsert() { $targetColumns = implode(', ', array_map(fn(Column $column) => $column->getName(),$this->columns));

複数の配列から要素を1つずつ選んで、すべての組み合わせを生成するPHPのプログラム

複数の配列から、要素を1つずつ選んですべての組み合わせを生成するプログラムをPHPで書いてみました。 ただし、組み合わせをすべて生成すると組み合わせ爆発を起こす可能性がありますので、使う際は本当に必要か慎重に検討してください。 <?php function iterateAllCombinations($sets, callable $callback) { $indexToKey = array_keys($sets); self::iterateAllCombinationsRecursive($sets, count($sets), $indexToKey, $callback, 0, []); } // 再帰的に呼ぶための関数本体 function iterateAllCombinationsRecursive($sets, $countOfSets, $indexToKey, callable $callback, $n, $generatedCombination) { if($n >= $countOfSets) { // この部分で生成された組み合わせを引数として、callbackが毎回呼ばれる。 $callback($generatedCombination); return; } $keyOfSet = $indexToKey[$n]; foreach($sets[$keyOfSet] as $e) { $generatedCombination[$keyOfSet] = $e; self::iterateAllCombinationsRecursive($sets, $countOfSets, $indexToKey, $callback, $n+1, $generatedCombination); } } 下記は、$callback内で生成された組み合わせをため込んだ場合の使用例になります。 <?php // 組み合わせを生成したい3つの配列 $sets = [ 'key1' => ['A', 'B',