「みんなの翻訳」は、世界中の文書をみんなで協力して翻訳するサイトです。

みんなの翻訳ロゴ
ブクタブ
翻訳サイト

カテゴリ一覧

このサイトについて 新規登録はこちら お試し翻訳

一覧

2017/07/28

メンテナンス終了のお知らせ

2017/7/25-2017/7/28に実施したメンテナンスは、2017/7/28/14:20に終了いたしました。 ご協力をいただき、ありが…

List

Hnoss

English⇒Japanese

shikimi

English⇒Japanese

sysInfo

English⇒Japanese

tkkobe

English⇒Japanese

ホーム > 翻訳記事

翻訳記事

GitLab CIの力でDebian パッケージのビルドを自動化する ~ GitLabでDebianパッケージの継続的デプロイを実現するには | about.gitlab.com / Adfinis SyGroup

  この記事は Adfinis SyGroupが顧客向けに公表した記事の転載です。

  皆さま、我が社はここに、GitLab CIを『Debianパッケージの全自動ビルドに利用可能である』ことをここに宣言いたします。

 GitLab CIには、「Git tags」などのイベントに応じて、どのタスクを実行するかを管理する機能があります。
 

  ただ単にGitLabで開発を進めるだけでは、何の変哲もないDockerコンテナに、開発に使うパッケージを導入してコードを書いているのと大して変わりありません。

 しかし、GitLab CIと併用するだけで、様々な作業を自動化させる仕掛けを追加することがます。
 まるでDockerコンテナが、何かもっと高等なソフトウェアに生まれ変わったような感覚が得られるはずです。

  これから、「GoAccess」というログ解析ツールのパッケージングを通して、どのようにして自動パッケージング環境を構築したかをお見せします。
 当然、ここで直接使われているツールなどは最新版のものではありません。ですので、そこだけは常に、最新のものに手動で置き換えていただきますよう、お願いいたします。

 

  Debian packageの準備

  まずは、Debianパッケージのビルドを司るファイルを作成します。
 GoAccessの場合、以下の4つでした。

======================
debian/changelog # パッケージとソフトウェアに対する変更について
debian/compat # debhelper における互換性レベルについて
debian/control # 依存関係や、ソフトの説明など、パッケージ固有の情報について
debian/rules # debhelper における注意書き
======================
 パッケージングに関わる詳しい情報については、Debianの説明書を参照してください。


 

  Dockerコンテナの準備

  コンテナは今回、ホストシステムでパッケージをビルドするために使用されます。まずは、Dockerfileを作成するところから始めましょう。

======================
FROM debian:wheezy
ADD setup.sh /opt/
RUN /bin/bash /opt/setup.sh
======================
 Dockerfile(公式説明書)には、これから開発に使っていくイメージの説明を記述します。
 今回の場合は、「Debian Wheezy」です。

次に、「setup.sh」にあるスクリプトをコピーして、コンテナの「/opt/」ディレクトリに貼り付けます。
 「setup.sh」には、Debianで開発を進めていく上で、『これがないとビルドすらできない』くらい、最も基本的なソフトをインストールするよう設定します。
 

============================================
#!/bin/sh

# URLからインストールしたDebianファイルを、Dockerのどのディレクトリに置き換えるかを記述する
echo "deb http://pkg.adfinis-sygroup.ch/debian/ wheezy main non-free contrib" > /etc/apt/sources.list
echo "deb http://security.debian.org/ wheezy/updates main" >> /etc/apt/sources.list
echo "deb http://pkg.adfinis-sygroup.ch/debian/ wheezy-updates main contrib non-free" >> /etc/apt/sources.list

# 必要な操作
apt-get update
apt-get -y install git dh-make build-essential autoconf autotools-dev
============================================

  これらのファイルの準備が全て整ったら、Dockerコンテナをきちんとビルドできるはずです。


 

  GitLab CIの設定

  さて、上の工程で準備したDockerを、次はGitLab プロジェクトとして登録します。

======================
gitlab-ci-multi-runner register \
--non-interactive \
--url "$(GITLAB_URL)" \
--registration-token "$(CI_TOKEN)" \
--description "Generic debian wheezy package build runner" \
--executor "docker" \
--docker-image "generic-package-build-runner:v1"
======================
 注:」マークはバックスラッシュの誤変換です。

 「GITLAB_URL」と「CI_TOKEN」の詳しい内容は、GitLab プロジェクトの「Settings > Runners」のページでご確認いただけます。
 CIトークンについては、それぞれのプロジェクトで個別のものを使っています。
 

  次に、「.gitlab-ci.yml」ファイルの編集に入ります。レポジトリにそのファイルを作成して、以下のように設定します。
 ここではコンテナに実行させたいコマンドをほとんどすべて記述することになります。

============================================
# 複数のjobで使用するコマンドを、今回は「/etc/profile 」というファイルに記述した
before_script:
- source /etc/profile

# jobをステージ分けする時には、使用するステージを明示しなくてはならない
stages:
  - build

# 以下は"build"ステージで実行するスクリプト
run-build:
stage: build
  script:
   - apt-get install -y libncurses5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev zlib1g-dev libncursesw5-dev libbz2-dev
   - autoreconf -fvi
   - cp COPYING debian/copyright
  
- dpkg-buildpackage -us -uc
   - mkdir build
  
- mv ../goaccess*.deb build/

# このステージは新たにtagが追加された時にしか作動しない
  only:
   - tags

# できたアプリをGitLabプロジェクトのどこに置くか
  artifacts:
   paths:
    - build/*
============================================
 このファイルで一番の肝となるものが、「run-build」jobです。
 このパートでビルド工程のときに、どのようなアクションをとるかを決定しています。

  ここで、「run-build」のスクリプトをいくつか解説しましょう。
 アプリを開発する上で、使い勝手が良いDockerコンテナを作るためのヒントです。参考にしてください。

 開発に必要なツールは、「script」の一番最初の行でインストールするよう設定されています。

  それから、「autoreconf」というコマンドは、ビルドプロセスの準備をするために必要です。(2行目)
 アプリを自動でビルドしたいものなら、「makedir」コマンドなど、何らかのファイル作成系コマンドが欠かせません。(5行目)

 パッケージの著作権条項を記した文章は、「debian/」ファイルにコピーしました。(3行目)

  そして、今回最大の目当てであるコマンドが、「dpkg-buildpackage」(4行目)です。これでコードをコンパイルし、Debianパッケージに変換します。

 こうして生成されたパッケージは、buildディレクトリに送信され、GitLabにアップロードされることになるのです。


 

  使い方

  今回の設定では、Gitにタグを作成すると、瞬時に新しいリリースが発表される仕組みになっています。

 GitLabの「tag」でビルドを開始するという機能は、どのバージョンを発表するかを、きちんと人の手で選択できるところがとても便利でした。

  出来上がったパッケージは、GitLabのwebインターフェイスからダウンロードできます。
  (写真)GitLabのダウンロード画面

 

  しめくくり

  これで理論上は、開発者が指定したパッケージだけを自動的に公開できる環境が整えられたはずです。

 わが社ではさらに、 GitLab Webhookという自動装置に少し手を加えて、パッケージを公表するサーバーやレポジトリまでもを指定しました。
 これにて、ビルドパッケージの全自動配布体制が整えられました。

 これらを応用すれば、ミラーを設置するなどの操作もできるようになります。

 皆さんも、アプリケーション開発をより自由で効率のよいものにしましょう。
 

  元記事: 『 Automated Debian Package Build with GitLab CI 』(26 August 2016 / Adfinis SyGroup) 

 

 
PDF
更新日:2017-11-02 15:07:04 Hnoss 0  del.icio.usに追加   はてなブックマークに追加   twitterに投稿   facebookでshare
[ 原文 ] https://about.gitlab.com/2016/10/12/automated-debian-package-build-with-gitlab-ci/ Creative Commons License この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。
クリエイティブ・コモンズ・ライセンス
翻訳者ページをみる

この記事の翻訳者

Hnoss さんの翻訳記事

僕がHugo静的サイト・ジェネレータをGitLabで使うときにしたCI設定 | from Leow Kah Man - Tech Blog

 週末にかけて、GitHubに構えていた私のブログをGitLabに移転しました。GitLabだとCIビルドが自動的にできるところが便利です。  僕はGitLabのレポジトリにNodeJS Dockerイメージを構…2017-11-18 13:00:02

【GitLab 公式 を訳してみた】Dockerイメージを使う

GitLab Documentation > GitLab Continuous Integration (GitLab CI) > Docker integration >Dockerイメージを使う  GitLab CIは、GitLab ランナーと連携して、Dockerエンジンを様…2017-11-18 00:10:16

【GitLab 公式 を訳してみた】 .gitlab-ci.yml 設定メニュー

 (訳者より:翻訳がもうだいぶ進んだところで、GitLab CIについてネットで検索をかけてみたところ、 Qiitaにてynott様が公開されたバージョン があることに気がつきました。  原…2017-11-17 23:50:27

【GitLab 公式 を訳してみた】GitLab CI/CDで使える変数

GitLab Documentation > GitLab Continuous Integration (GitLab CI) >GitLab CI/CDで使えるAPI変数  GitLab ランナーは、CIから送られてきたjobをもとに、ビルド環境を整えます。…2017-11-17 23:50:02