目次

概要

TODO:

環境構築

XXX.XXX.XXX.XXX は対象マシンのIP

.env

GITEA_HOST=XXX.XXX.XXX.XXX
GITEA_HTTP_PORT=13000
GITEA_SSH_PORT=10022
GITEA_USER_GID=1000
GITEA_USER_UID=1000

GITEA_DB_HOST=gitea-db:5432
GITEA_DB_NAME=gitea
GITEA_DB_PASSWD=gitea
GITEA_DB_PASSWORD=gitea
GITEA_DB_USER=gitea

DRONE_HOST=XXX.XXX.XXX.XXX
DRONE_PORT=8000
DRONE_GITEA_CLIENT_ID=
DRONE_GITEA_CLIENT_SECRET=
DRONE_RPC_SECRET=secret
DRONE_RUNNER_CAPACITY=2

REGISTRY_PORT=15000

docker-compose.yml

version: "3"

services:
  gitea-app:
    image: gitea/gitea:latest
    hostname: gitea-app
    container_name: gitea-app
    environment:
      USER_UID: "${GITEA_USER_UID}"
      USER_GID: "${GITEA_USER_GID}"
      DOMAIN: "${GITEA_HOST}"
      HTTP_PORT: "${GITEA_HTTP_PORT}"
      ROOT_URL: "http://${GITEA_HOST}:${GITEA_HTTP_PORT}"
      DB_TYPE: "postgres"
      DB_HOST: "${GITEA_DB_HOST}"
      DB_NAME: "${GITEA_DB_NAME}"
      DB_USER: "${GITEA_DB_USER}"
      DB_PASSWD: "${GITEA_DB_PASSWD}"
      SSH_DOMAIN: "${GITEA_HOST}"
      SSH_PORT: "${GITEA_SSH_PORT}"
      SKIP_TLS_VERIFY: "true"
      TZ: "Japan"
    ports:
      - "${GITEA_HTTP_PORT}:${GITEA_HTTP_PORT}"
      #- "${GITEA_SSH_PORT}:${GITEA_SSH_PORT}"
    volumes:
      - ./volumes/gitea-app:/data
      #- /etc/timezone:/etc/timezone:ro
      #- :/etc/localtime:ro
    links:
      - gitea-db

  gitea-db:
    image: postgres:latest
    hostname: gitea-db
    container_name: gitea-db
    volumes:
      - ./volumes/gitea-db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: "${GITEA_DB_NAME}"
      POSTGRES_USER: "${GITEA_DB_USER}"
      POSTGRES_PASSWORD: "${GITEA_DB_PASSWD}"

  drone-app:
    image: drone/drone:latest
    hostname: drone-app
    container_name: drone-app
    environment:
    links:
      - gitea-app
    depends_on:
      - gitea-app
    environment:
      DOCKER_API_VERSION: "1.39"
      DRONE_AGENT_ENABLED: "true"
      DRONE_GITEA_SERVER: "http://${GITEA_HOST}:${GITEA_HTTP_PORT}"
      DRONE_GITEA_CLIENT_ID: "${DRONE_GITEA_CLIENT_ID}"
      DRONE_GITEA_CLIENT_SECRET: "${DRONE_GITEA_CLIENT_SECRET}"
      DRONE_RPC_SECRET: "${DRONE_RPC_SECRET}"
      DRONE_SERVER_HOST: "${DRONE_HOST}:${DRONE_PORT}"
      DRONE_SERVER_PROTO: "http"
      DRONE_USER_CREATE: "username:sample,admin:true"
      DRONE_GITEA_SKIP_VERIFY: "true"
      DRONE_GITEA_ALWAYS_AUTH: "false"
      DRONE_TLS_AUTOCERT: "false"
    ports:
      - "${DRONE_PORT}:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./volumes/drone-app:/var/lib/drone

  drone-runner:
    image: drone/drone-runner-docker:latest
    hostname: drone-runner
    container_name: drone-runner
    links:
      - drone-app
      - gitea-app
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./.env:/etc/drone.env:ro
    environment:
      DOCKER_API_VERSION: "1.39"
      DRONE_RPC_PROTO: "http"
      DRONE_RPC_HOST: "${DRONE_HOST}:${DRONE_PORT}"
      DRONE_RPC_SECRET: "${DRONE_RPC_SECRET}"
      DRONE_RUNNER_CAPACITY: "${DRONE_RUNNER_CAPACITY}"
      DRONE_RUNNER_NAME: "drone-runner"
      DRONE_RUNNER_ENV_FILE: "/etc/drone.env"
      DRONE_TRACE: "true"
      DRONE_RPC_DUMP_HTTP: "true"
      DRONE_RPC_DUMP_HTTP_BODY: "true"

  local-registry:
      image: registry:2
      hostname: local-registry
      container_name: local-registry
      ports:
        - "${REGISTRY_PORT}:5000"
      volumes:
        - ./volumes/local-registry:/var/lib/registry

Gitea環境構築

コンテナ作成

コンテナ名を指定して Gitea だけ作成する。

docker-compose up gitea-app gitea-db -d

server=`cat .env | grep GITEA_HOST | awk -F= '{print $2}'`
port=`cat .env | grep GITEA_HTTP_PORT | awk -F= '{print $2}'`

echo "Gitea Server: http://${server}:${port}"

ユーザ作成 及び OAuthアプリケーション登録

表示されたURLにアクセスしてインストール

[登録] 押下。
gitea_setup01.png

入力項目は環境変数で指定した値になっている筈なのでこのまま [Giteaをインストール] を押下。
gitea_setup02.png

ユーザ登録

gitea_setup03.png

gitea_setup04.png

OAuthアプリケーションを登録

[設定] → [アプリケーション] から OAuth アプリケーションを登録。
gitea_setup05.png

クライアントIDとシークレットを確認する。
gitea_setup06.png

確認した値を .env に記述しておく。

DRONE_GITEA_CLIENT_ID=XXXXXXXXXXXXXXXXXXXXXXXXX
DRONE_GITEA_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXX

レポジトリ作成

gitea_setup07.png

レポジトリ設定

今回のサンプルでは Weboook とイベントが被って処理が2重に走ってしまうので、デフォルトのGitフックを無効にしておく。

リポジトリの [設定] → Gitフック から update の 編集ボタンを押下。
gitea_setup08.png

内容を空にして [フックを更新]
gitea_setup09.png

Drone環境構築

Drone コンテナ作成

残りのコンテナも作成。
※いったん Gitea は止める。( 再起動しないと削除したGitフックが反映されない事があるので )

docker-compose stop
docker-compose up -d
#source .env && echo "http://${DRONE_HOST}:${DRONE_PORT}"
server=`cat .env | grep DRONE_HOST | awk -F= '{print $2}'`
port=`cat .env | grep DRONE_PORT | awk -F= '{print $2}'`
echo "Drone Server: http://${server}:${port}"

再起動後はセッションが切れているので、再度 http://giteaのIP:13000 にアクセスしてログインし直しておく。

AOuth許可 及び Activate

gitea_setup10.png

gitea_setup11.png

gitea_setup12.png

gitea_setup13.png

動作確認

リポジトリをcloneする

git clone http://GireaのIP:ポート/sample/sample-repo.git

テストを作成する

git clone したディレクトリに移動して以下の通り作成する。

 ┗ .done.yml
 ┗ .gitignore
 ┗ requirements.txt
 ┗ tests
   ┗ test_sample1.py

・・・ 後述
・・・ https://github.com/pytest-dev/pytest/blob/master/.gitignore 辺りから
 
 
・・・ サンプルのテストコード

requirements.txt

pytest

tests/test_sample1.py

import pytest
import subprocess

def test_main():
    print("これはテストのサンプルです")
    print("## 変更されたファイル ##")
    #result = subprocess.getoutput("git diff HEAD~ --name-only")
    result = subprocess.check_output(['git', 'diff HEAD~', '--name-only')
    print(result.decode())

.drone.yml の作成

.drone.yml にパイプライン定義する。
https://docs.drone.io/pipeline/docker/overview/

kind: pipeline
type: docker
name: default

steps:
- name: test1
  image: python
  commands:
  - "echo sample test1"
  - "pip install -r requirements.txt"
  - "pytest -v -s"
  when:
    branch:
    - master

作成したファイルを git push

git add . && git commit -m "add test code" && git push

Droneで結果を確認

drone_result01.png

drone_result02.png

drone_result03.png

Tips

Drone docker runner に環境変数を渡す

環境変数を記述したファイルを定義し、環境変数に DRONE_RUNNER_ENV_FILE 指定する事で、
runner に 環境変数を渡す事ができる。
https://docker-runner.docs.drone.io/installation/reference/drone-runner-env-file/

例)

.env

MY_VAR1=sample1
MY_VAR2=sample2

docker-compose.yml

  drone-runner:
    image: drone/drone-runner-docker:latest
    :
    volumes:
      # 環境変数ファイルをマウントしておく
      - ./.env:/etc/drone.env:ro
    environment:
      # 以下の環境変数で環境変数を定義したファイルのPATHを指定しておく
      DRONE_RUNNER_ENV_FILE: "/etc/drone.env"

以上で、 runner から起動されたコンテナでも .env で定義した環境変数を利用する事ができる。

プライベートレジストリからイメージをプルする

dockerHub で公開されているものや、ローカルリポジトリからDockerイメージをプルする場合は特に気にする必要はないが、
認証が必要なプライベートリポジトリからイメージをプルする場合、一手間必要になる模様。
https://discourse.drone.io/t/how-to-pull-private-images-with-1-0/3155

Mac の時

Mac の場合、/etc/localtime をそのままマウントしようとすると以下のエラーになる。

ERROR: for gitea-app  Cannot start service gitea-app: Mounts denied: 
The paths /etc/timezone and /etc/localtime
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
.

環境変数で指定して回避。

environment:
  TZ: "Japan"

Docker API のバージョンが新しすぎると怒られる

default: Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.39

docker-compose .yml で Docker API バージョンを指定する

  drone-app:
    :
    environment:
      DOCKER_API_VERSION: "1.39"
       :

  drone-runner:
    :
    environment:
      DOCKER_API_VERSION: "1.39"
       :

添付ファイル: filedrone_result03.png 1件 [詳細] filedrone_result02.png 1件 [詳細] filedrone_result01.png 1件 [詳細] filegitea_setup13.png 1件 [詳細] filegitea_setup12.png 1件 [詳細] filegitea_setup11.png 1件 [詳細] filegitea_setup10.png 1件 [詳細] filegitea_setup05.png 1件 [詳細] filegitea_setup06.png 1件 [詳細] filegitea_setup09.png 1件 [詳細] filegitea_setup08.png 1件 [詳細] filegitea_setup07.png 1件 [詳細] filegitea_setup04.png 1件 [詳細] filegitea_setup03.png 1件 [詳細] filegitea_setup02.png 1件 [詳細] filegitea_setup01.png 1件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-08-22 (土) 17:21:38 (31d)