みなさんこんにちは。
完全なCIを必要とするタスクは多くありません。 しばらくの間、JenkinsをCIサービスとして使用しました。 そこにはすべてが明らかであり、設定が簡単で柔軟性があり、多くのプラグインがありますが、2、3回、弱いマシンでエージェントのOOMキラーに遭遇し、Gitlab CIをCIサービスとして検討することにしました。前回の記事で、彼らはそのような質問をしました。
GitLab-CEをインストールする
Omnibusパッケージがある
ため 、ここではすべてが非常に簡単です。
必要なパッケージをインストールして実行します。
sudo yum install curl openssh-server openssh-clients postfix cronie sudo service postfix start sudo chkconfig postfix on
Gitlab-CEをインストールします。
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo yum install gitlab-ce
Gitlab-CEを構成して起動します。
sudo gitlab-ctl reconfigure
ランナーのインストール
GitLab Runnerは、特別な.gitlab-ci.ymlファイルから命令を実際に実行するエージェントです。
Jenkinsとは異なり、ヒットラボランナーはGoで記述されているため、非常に小さくて高速です。 また、ローカル、ドッカーコンテナ、異なるクラウド、またはサーバーへのssh接続を介して、まったく異なる方法でタスクを起動できます。 いつものよう
に、ドキュメントの詳細
最後の記事へのコメントの誰かが、Gitlabでansibleプレイブックをテストすることを検討し、それを取るように頼みました。
テスト環境と実稼働環境のIDを確認するために、Dockerを使用します。
Dockerでランナーを実行するには、最初にdockerをインストールする必要があります。
curl -sSL https://get.docker.com/ | sh
ランナーのインストール
ランナーを構成してCIサービスに接続する:
sudo gitlab-ci-multi-runner register Please enter the gitlab-ci coordinator URL (eg https://gitlab.com/ci ) http://domain.example.com/ci Please enter the gitlab-ci token for this runner bQ0nvkVJACDUrvQ9ttqx Please enter the gitlab-ci description for this runner my-runner INFO[0034] fcf5c619 Registering runner... succeeded Please enter the executor: shell, docker, docker-ssh, ssh? docker Please enter the Docker image (eg. ruby:2.1): centos:7 INFO[0037] Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
GitlabのURLを指定し、認証用のトークンを登録します。
dockerの場合、ランナーの名前、ジョブを開始する方法も指定する必要があります-ランナーを実行するイメージを指定します。
ランナーの構成は、url
example.com/groupname/projectname/runnersで示され
ますここで、ランナーの名前と、このランナーでプロジェクトをアセンブルするラベルを編集できます。 たとえば、プロジェクトをさまざまな段階でテストする必要があります。最初にシェルで、次にそれをdockerコンテナーにパックし、sshでどこかでロールします。 これについては後で詳しく説明します。
そこから、マスターURLとトークンを取得して、「マスター」のランナーを承認する必要があります。

打ち上げ
sudo gitlab-ci-multi-runner start
その後、プロジェクトランナーのリストに表示されます。

Container Registryのインストール
少し前まで、
Container Registryは Gitlab
に統合されていました。
GitLab Container Registryは、Dockerイメージを保存するための安全なプライベートリポジトリです。
/etc/gitlab/gitlab.rbセクションの
コンテナレジストリ設定を確認しています registry_external_url 'https://domain.example.com'
必要なものの:
gitlab_rails ['registry_enabled'] = trueおよび
レジストリ['enable'] = trueを設定する必要があり
ますregistry_external_urlで、リポジトリが配置されるサーバーのドメイン名を指定します。
次の設定も見つける必要があります。
registry_nginx['ssl_certificate'] = "/path/to/certificate.pem" registry_nginx['ssl_certificate_key'] = "/path/to/certificate.key"
そして、証明書への正しいパスを指定します。
自己署名証明書が使用される場合、画像のすべての作業が行われる
docker- daemon側で
--insecure-registryオプションを設定する必要があります。そうしないと、ログインしようとするとエラーが発生します(ランナーも懸念します)。
Debianの場合:
/etc/systemd/system/multi-user.target.wants/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network.target docker.socket Requires=docker.socket [Service] Type=notify ExecStart=/usr/bin/docker daemon -H fd://
(はい、ポートを指定する必要はありません。レジストリ用のAPIがあります-ローカルホストでハングアップします:5000と、画像の承認と追加作業が行われるフロント。ローカルホストからAPIを転送する方法を探しています:))
変更を適用する
systemctl daemon-reload
systemctl restart docker
gitlabアカウントでログインしてみてください
docker login domain.example.com Username: root Password: Email: admin@example.com WARNING: login credentials saved in /root/.docker/config.json Login Succeeded
さて、これで何かをし、最初のパイプラインを構築し、プロジェクトがどのように組み立てられるかを見てみましょう。
CIセットアップ
ansibleプレイブックのテストを始めましょう:
詳細については触れませんが、serverspecとtest-kitchenについては説明しません。これらについては、前回の投稿ですでに説明しました。
まず、テスト用の環境で単純なイメージを組み立てます。
Dry runと
ansible-lintを回避しましょう 。
vim dockerfile FROM centos:7 RUN yum -y update && yum -y install epel-release \ && yum -y install ansible python-pip RUN pip install ansible-lint
さて、画像をまとめましょう
docker build -t centos:7 .
そして、レジストリにプッシュ
docker tag centos:7 domain.example.com/<groupname>/<projectname> docker push domain.example.com/<groupname>/<projectname>
次に、パイプラインについて説明します
プロジェクトのルートで、.gitlab-ci.ymlファイルを作成し(YAMLを繰り返します)、プロジェクトをビルドする手順を説明します。
image: domain.example.com/root/my-repo stages: - test - deploy test_job: stage: test script: - ansible-lint playbook.yml - ansible-playbook
ここでは、プロジェクトアセンブリの段階を示します。 テスト段階では、構文エラーについてリントスルーし、ドライモードでAnsibleを実行します。つまり、ホストに変更を適用せずに、単に表示するだけです。 プレイブックの再生中に突然何かが壊れた場合、ホスト構成が変更される前にこれについて知ることができます。
それに対応して、プレイブックのどこかにスペースを追加しようとすると、設定は適用されず、lintはテスト段階でエラーとクラッシュを報告します。これは、gitlab Webインターフェイスで直接コミットした後に見つけることができます。

.Gitlab-ci.ymlに は 、プロジェクトライフステージのすべてのケースに対して
多くの異なるオプションがあります 。 残念ながら、ある夜にすべてを知ることはできませんでした。
ご覧のとおり、Gitlabは他のCIサービスよりも悪くはなく、肯定的で便利なインターフェイスを備えていますが、テストスクリプトの作成と展開に関する機能があります。
ご清聴ありがとうございました。 良い自動化!