DockerでDevOps環境を整える

# DockerでDevOpsな環境を整える

ここ数年、炎上してる案件にアサインされてる。。
傾向として、svnでブランチがいっぱい作ってマージでデグレしたり、
Excelでバグ表を管理したり、ガントチャートを手作業で管理したり、
結合テストの段階までプログラムを動かしたテストをしてない、
テストが自動化されていないと惨憺たる状況が見られる。。。

正直、付き合ってられない😭
~~チンパンジーを相手にしてる気分、~~

ということで、`docker-compose`を使って、進捗/バグ管理にRedmine
ソース管理と自動テストのためにgitlab,gitlab-runnerの環境を整えてみました。

ソースコードやバグの管理、テストの自動化などに使っていただければ幸いです。

## docker-compose.ymlファイル

```yaml:docker-compose.yml
version: "3"

volumes:
  # gitlab関連Volume
  gitlab-config:
    name: gitlab-config
  gitlab-logs:
    name: gitlab-logs
  gitlab-data:
    name: gitlab-data
  gitlab-runner-config:
    name: gitlab-runner-config
  # redmine関連 Volume
  redmine-plugins:
    name: redmine-plugins
  redmine-themes:
    name: redmine-themes
  redmine-db:
    name: redmine-db

networks:
  cicd-network: # gitlab-redmine用ネットワーク
    name: cicd-network
    driver: bridge
    ipam:
     driver: default
     config:
       - subnet: 172.27.11.0/24
         gateway: 172.27.11.1

services:
  # redmine 本体
  redmine:
    container_name: redmine
    image: redmine
    restart: always
    ports: # Redmine公開port
      - 8081:3000
    environment:
      REDMINE_DB_MYSQL: redmine-db
      REDMINE_DB_PASSWORD: redminepass
    volumes:
      - redmine-plugins:/usr/src/redmine/plugins
      - redmine-themes:/usr/src/redmine/public/themes
    networks:
      cicd-network:
        ipv4_address: 172.27.11.2

  redmine-db:
    image: mysql:5.7
    container_name: redmine-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: redminepass
      MYSQL_DATABASE: redmine
    volumes:
      - redmine-db:/var/lib/mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci   
    networks:
      cicd-network:
        ipv4_address: 172.27.11.3

  # GitLab関連コンテナ
  lab:
    image: 'gitlab/gitlab-ee:latest'
    restart: always
    hostname: 'gitlab.com'
    container_name: gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.my.com'
    ports: # git公開ポート       
      - '8080:80'
      # - '443:443'
      # - '22:22'
    volumes:
      - 'gitlab-config:/etc/gitlab'
      - 'gitlab-logs:/var/log/gitlab'
      - 'gitlab-data:/var/opt/gitlab'
    shm_size: '256m'
    networks:
      cicd-network:
        ipv4_address: 172.27.11.4

  runner:
    image: gitlab/gitlab-runner:latest    
    restart: always
    container_name: gitlab-runner
    volumes:
       # dind でもいいが、今回はDooDでDockerHostのソケットファイルを共有
      - /var/run/docker.sock:/var/run/docker.sock
      - gitlab-runner-config:/etc/gitlab-runner
    networks:
      cicd-network:
        ipv4_address: 172.27.11.5
```

## コンテナを起動する。

上記の`docker-compose.yml`を格納したディレクトリで以下のコマンドを実行するだけです。

```bash
docker-compose up -d
```

## GitLabにログインする

`http://<DockerhostのIP>:8080/`でログイン画面を開く、
初回は`root`でログインする。

パスワード以下のコマンドで取得できる。

```sh
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
```

![ログイン画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/d8b455ee-54ba-3854-bd65-d8e7d2589b44.png)

## Redmineにログインする

`http://<DockerhostのIP>:8081/`でログイン画面を開く。
デフォルトでユーザー名,パスワードが共にadminとなっている。

## gitlab-runnerでCI/CDの設定をする

1. gitlab-runnerのコンテナに入り、`gitlab-runner register`を実行する。

    ```shell
    # runner のコンテナに入って、gitlab-runnerに登録する
    docker exec -it gitlab-runner  /bin/bash 
    gitlab-runner register
    ```

1. URLを聞かれたら、`http://172.27.11.4:80`を入力する
  (docker-compose.ymlでipを振ってるので、DockerホストのIPに置き換えなくていいです。🤗)


1. tokenを聞かれたら、
   gitlabのページから「settings」→「CI/CD」→「Runners」をクリックして、
   「Specific runners」でtokenをコピーする。
    ![スクリーンショット 2022-11-13 5.37.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/ceb98c27-4588-c946-7e2e-7ef3b0a0de4e.png)


1. runnerのdescription、テストを実行するタグなどが聞かれる。
   (適当に入力してください、入力せずにenterでも大丈夫)

1. 実行環境が聞かれるので、やりたいことに合わせて適宜入力する。
   (shellにするとあれこれ聞いてこないので楽🤗)

    ![スクリーンショット 2022-11-13 5.36.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/e848c237-b39f-bcca-2d2e-87c2be53ce3c.png)

1. `gitlab-runner register`の設定が終わって、gitlabの画面を更新すると
追加したrunnerが確認できる。

1. 追加されたrunnerでeditをクリックし、「Run untagged jobs」にチェックする。
   

    ![スクリーンショット 2022-11-13 5.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/3ef31ed5-312d-cbdc-cd87-5190ca2ed5aa.png)


    ![スクリーンショット 2022-11-13 5.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276495/99197334-009e-dcdf-c72e-83202a51030c.png)

1. 最後に`.gitlab-ci.yml `ファイルをコミットすると`runner`が動くようになる。