tag:crieit.net,2005:https://crieit.net/tags/CI/feed
「CI」の記事 - Crieit
Crieitでタグ「CI」に投稿された最近の記事
2020-04-04T15:57:22+09:00
https://crieit.net/tags/CI/feed
tag:crieit.net,2005:PublicArticle/15810
2020-04-04T10:47:33+09:00
2020-04-04T15:57:22+09:00
https://crieit.net/posts/github-actions-build-lastmod
hugoをgithub-actions上でbuildした際、lastmodの更新がすべての記事に適用される問題を解決した
<h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2>
<p><a target="_blank" rel="nofollow noopener" href="https://tech-wafter.net/2020/build-hugo-homepage-by-github-action/">hugoのジェネレートをGitHub-actionsを使って、pushするだけでデプロイできるようにした</a>のですが、全記事の最終更新日が更新されていたため原因調査をおこないました。</p>
<h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2>
<ul>
<li>gitのcloneを行う際に最新コミットしか取得していなかった</li>
<li><code>actions/checkout</code>を利用する場合は以下の方法でfetchを行わせ、全履歴を取得しておく</li>
</ul>
<pre><code class="yaml">- uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history for .GitInfo and .
</code></pre>
<h2 id="試したこと"><a href="#%E8%A9%A6%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8">試したこと</a></h2>
<h3 id="GitHub-actions上とlocalの比較"><a href="#GitHub-actions%E4%B8%8A%E3%81%A8local%E3%81%AE%E6%AF%94%E8%BC%83">GitHub-actions上とlocalの比較</a></h3>
<div class="table-responsive"><table>
<thead>
<tr>
<th align="center">icon</th>
<th align="center">結果</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">✅</td>
<td align="center">更新対象記事のみlastmodが更新されていた</td>
</tr>
<tr>
<td align="center">❎</td>
<td align="center">すべての記事に対して更新が入っていた</td>
</tr>
</tbody>
</table></div>
<ul>
<li>ローカル
<ul>
<li>✅MacOSでのビルド</li>
<li>✅Vagrant内のUbuntu:18.04.4でのビルド</li>
</ul></li>
<li><p>CI環境</p>
<ul>
<li>❎Ubuntu:ubuntu-18.04でのビルド</li>
<li>❎MacOS:latestでのビルド</li>
<li>✅hugoのビルドを省いてデプロイ</li>
<li>❎オプションを外してビルド</li>
<li><p>❎既存のworkflowを使わずにコマンドでインストール(下記コマンドを実行)</p>
<pre><code class="bash">wget https://github.com/gohugoio/hugo/releases/download/v0.68.3/hugo_0.68.3_Linux-64bit.deb
sudo apt-get install -y ./hugo_0.68.3_Linux-64bit.deb
</code></pre></li>
</ul></li>
</ul>
<h3 id="git周りの確認"><a href="#git%E5%91%A8%E3%82%8A%E3%81%AE%E7%A2%BA%E8%AA%8D">git周りの確認</a></h3>
<ul>
<li>参照先のcommitIDが対象コミットのcommitIDになっているか
<ul>
<li>対象のコミットIDでした</li>
</ul></li>
<li><code>git log</code>の結果が正常に表示されているか
<ul>
<li><strong>CI上のログでは、1件しか表示されていなかった</strong></li>
</ul></li>
</ul>
<h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2>
<p><code>actions/checkout@v2</code>という公式のworkflowを利用してgitのcloneを行っていたのですが、デフォルトでは最新のコミットしか取ってこないようです。<br />
更新日時の参照先が見つけられなくなるため、すべての記事が最新のコミット更新日時を取得しに行ってしまったのだと思います。</p>
<blockquote>
<pre><code class="markdown"># Number of commits to fetch. 0 indicates all history.
# Default: 1
fetch-depth: ''
</code></pre>
<p>https://github.com/actions/checkout#usage</p>
</blockquote>
<p>すべての履歴をcloneしてくることで、解決しました。<br />
GitHub Actionsのymlファイルでは、以下のように記載するようです。</p>
<blockquote>
<pre><code class="yaml">- uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history for .GitInfo and .
</code></pre>
<p>https://github.com/peaceiris/actions-hugo#️-create-your-workflow</p>
</blockquote>
<h2 id="さいごに"><a href="#%E3%81%95%E3%81%84%E3%81%94%E3%81%AB">さいごに</a></h2>
<p>最初はhugoのセットアップに使っているworkflowが悪いのかを疑ってたせいで、結構解決までに時間がかかりました…</p>
<p>今回のような問題を早期発見するために、確認用のStepも入れたほうが良いのかなと思いました。</p>
<h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2>
<ul>
<li><a target="_blank" rel="nofollow noopener" href="https://github.com/actions/checkout">actions/checkout: Action for checking out a repo</a></li>
<li><a target="_blank" rel="nofollow noopener" href="https://github.com/peaceiris/actions-hugo">peaceiris/actions-hugo: GitHub Actions for Hugo ⚡️ Setup Hugo quickly and build your site fast. Hugo extended, Hugo Modules, Linux (Ubuntu), macOS, and Windows are supported.</a></li>
</ul>
matsu4ki
tag:crieit.net,2005:PublicArticle/15728
2020-02-20T18:48:36+09:00
2020-02-26T17:42:55+09:00
https://crieit.net/posts/GitHub-Actions-MySQL-Laravel
GitHub ActionsでMySQLを使ったLaravelのテストを実行する
<p>GitHub ActionsでMySQLを使ったLaravelのテストを実行してみたら出来たのでメモ。</p>
<p>アクションを作成する時にLaravelの雛形が選べるようなので、とりあえずそちらを使って作成する。雛形を下記のように置き換えた。</p>
<pre><code class="yaml">name: Laravel
on: [push]
jobs:
laravel-tests:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
ports:
- 3306
options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: laravel
steps:
- uses: actions/checkout@v2
- name: Copy .env
run: php -r "file_exists('.env') || file_put_contents('.env', str_replace('DB_PORT=3306', 'DB_PORT=$<span>{</span><span>{</span> job.services.mysql.ports['3306'] <span>}</span><span>}</span>', file_get_contents('.env.example')));"
- name: Cache vendor
id: cache-vendor
uses: actions/cache@v1
with:
path: vendor
key: $<span>{</span><span>{</span> runner.os <span>}</span><span>}</span>-vendor-$<span>{</span><span>{</span> hashFiles('**/composer.lock') <span>}</span><span>}</span>
- name: Install Dependencies
if: steps.cache-vendor.outputs.cache-hit != 'true'
run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Execute tests (Unit and Feature tests) via PHPUnit
run: vendor/bin/phpunit
</code></pre>
<h2 id="やったこと"><a href="#%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">やったこと</a></h2>
<p>下記が追加で編集したもの。</p>
<h3 id="MySQLの設定"><a href="#MySQL%E3%81%AE%E8%A8%AD%E5%AE%9A">MySQLの設定</a></h3>
<p>もともとはSQLiteでテストが行われる設定になっていたが、ちゃんとMySQLで実行したいのでその設定。まずはservicesにMySQLのサービスを追加。optionsはよくわからないがコンテナが落ちてしまうらしいので追加している。そのうち不要になるのでは。</p>
<p>接続の設定は <code>.env.example</code> をコピーして使う。そのため、その設定に合わせてこのサービスのenvを設定する。具体的な設定はDockerHubのmysqlイメージのところに書いてある。</p>
<p>ポートは <code>$<span>{</span><span>{</span> job.services.mysql.ports['3306'] <span>}</span><span>}</span></code> という感じでサービスのポートを参照できる。ホストはローカル。ただしlocalhostでなく127.0.0.1としないとつながらないっぽい。</p>
<h4 id="phpunit.xmlの編集"><a href="#phpunit.xml%E3%81%AE%E7%B7%A8%E9%9B%86">phpunit.xmlの編集</a></h4>
<p>phpunit.xmlにSQLiteを使う設定が書かれているので、そちらを削除する。</p>
<h3 id="キャッシュの設定"><a href="#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E8%A8%AD%E5%AE%9A">キャッシュの設定</a></h3>
<p>vendorフォルダをキャッシュする。Cache vendorとInstall Dependenciesのところ。これでキャッシュされて次回から0秒になっているので多分大丈夫っぽい。</p>
<p><a href="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5e4e55ac0e03c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5e4e55ac0e03c.png?mw=700" alt="image.png" /></a></p>
<p>ちなみに下記がキャッシュ前。</p>
<p><a href="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5e4e55d2a2859.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e2af66c610d88bc766649f72032893a5e4e55d2a2859.png?mw=700" alt="image.png" /></a></p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>雛形もあるし非常に簡単だった。</p>
だら@Crieit開発者
tag:crieit.net,2005:PublicArticle/14861
2019-03-08T00:17:46+09:00
2019-03-08T00:19:10+09:00
https://crieit.net/posts/Express-TypeORM-Wercker-CI
Express+TypeORMの環境にてWerckerでCI
<p>ExpressとTypeORMを使ったアプリケーションのWerckerでのCIがとりあえず完成したのでメモ。</p>
<pre><code class="yaml">box: node
services:
- id: mysql
tag: 5.7
env:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_DATABASE: dbname
build:
steps:
- script:
name: yarn
code: yarn
- script:
name: Fill mysql env
code: |-
cp .env.example .env
sudo sed -i -e "s/TYPEORM_HOST=localhost/TYPEORM_HOST=$MYSQL_PORT_3306_TCP_ADDR/g" .env
sudo sed -i -e "s/TYPEORM_PORT=3306/TYPEORM_PORT=$MYSQL_PORT_3306_TCP_PORT/g" .env
cp .env test/.env
- script:
name: migration
code: yarn run migrate:run
- script:
name: yarn test
code: yarn test
</code></pre>
<p>migrationとtestのコマンドは適宜自分で設定。</p>
<p><code>test/.env</code>はテスト用に読むこむやつを設定しているというだけなので別のやり方をしている場合は不要。</p>
<p>TypeORMは特にテスト用のDB管理方法があるわけではないようなので、事前にマイグレーションしている。(ローカル環境も考慮すると全部自分で準備しなければならないのが非常に面倒)</p>
<p>ちなみにテストは下記でつくったもの。</p>
<p><a href="https://crieit.net/posts/Mocha-SuperTest-async-await">Mocha+SuperTestでasync/awaitを使ってテスト</a></p>
だら@Crieit開発者
tag:crieit.net,2005:PublicArticle/14469
2018-06-17T19:55:22+09:00
2018-10-25T17:29:30+09:00
https://crieit.net/posts/Wercker-Laravel5-6-PHP7-CI
WerckerでLaravel5.6+PHP7のCI
<p><a href="https://crieit.net/posts/BitBucket-Wercker-Laravel5-CI">BitBucket+WerckerでLaravel5のCI</a> でも書いたとおり、BitBucket+Werckerを利用することでLaravel5のCIを無料で簡単に行うことができます。</p>
<p>ただ、上記の内容だと最新のLaravel5.6(PHP7)には対応していないため、対応したものでCIできるようにしてみました。</p>
<p>下記が設定のためのwercker.ymlになります。</p>
<pre><code class="yaml">box: dala00/laravel
services:
- id: mysql
tag: 5.7
env:
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
MYSQL_DATABASE: test
build:
steps:
- script:
name: Install dependencies
code: |
composer install
- script:
name: Fill mysql env.
code: |-
sudo sed -i -e "s/DB_HOST=mysql/DB_HOST=$MYSQL_PORT_3306_TCP_ADDR/g" .env.testing
sudo sed -i -e "s/DB_PORT=3306/DB_PORT=$MYSQL_PORT_3306_TCP_PORT/g" .env.testing
- script:
name: Run phpunit
code: |-
vendor/bin/phpunit
</code></pre>
<h2 id="Werckerで使っている設定の解説"><a href="#Wercker%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A8%AD%E5%AE%9A%E3%81%AE%E8%A7%A3%E8%AA%AC">Werckerで使っている設定の解説</a></h2>
<pre><code class="yaml">box: dala00/laravel
</code></pre>
<p>僕が作ったイメージです(7.2。タグ付けは忘れているようです)。<code>/var/www/app</code>にプロジェクトが入っています。ちょっとしたものは大体動くのでこれで問題ない気がします(どうしてもちょうどいいイメージが見つからないため…)。</p>
<pre><code class="yaml"> - id: mysql
tag: 5.7
</code></pre>
<p>mysql8が入るとパスワードのプラグインが違う関係でWerckerのCI時に接続ができません。仕方がないのでtagで5.7を指定しています。(恐らく今後イメージ側かWercker側で対処してくれるとは思うのですが…)</p>
<pre><code class="yaml"> sudo sed -i -e "s/DB_HOST=mysql/DB_HOST=$MYSQL_PORT_3306_TCP_ADDR/g" .env.testing
sudo sed -i -e "s/DB_PORT=3306/DB_PORT=$MYSQL_PORT_3306_TCP_PORT/g" .env.testing
</code></pre>
<p>Laravel5.6のテストの場合はphpunit.xmlで指定されている環境変数である<code>APP_ENV=testing</code>が使われるため、<code>.env.testing</code>が優先的に使用されます。また、WerckerはDBのIPがMYSQL_PORT_3306_TCP_ADDRで取得できるので、<code>.env.testing</code>をその内容に置換します。置換前の文字列は適宜自分のものに置き換えてください。</p>
<p>こんな感じでWerckerにてLaravel5.6のCIが可能です。BitBucketを利用されている方は連携も非常に簡単ですので是非お試しください。</p>
だら@Crieit開発者