3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

gitlab-release-note-generatorを使ってみた。

Last updated at Posted at 2021-01-27

GitHubには自動リリースノート作成機能があるんだけど、GitLabにはそういった機能デフォルトではなさそうなんだよねえ。

https://github.com/jk1z/gitlab-release-note-generator
というわけでこれを使ってみた。

まずはコマンドラインから

docker container run -e GITLAB_PERSONAL_TOKEN=gitlabSampleToken \
                     -e GITLAB_PROJECT_ID=12345678 \
                     -e TARGET_BRANCH=master \
                     -e GITLAB_API_ENDPOINT=http://hogehoge/gitlab \
                     00freezy00/gitlab-release-note-generator

これをdockerが既にインストールされているEC2上で動作させて、sample通りに動作することを確認。まあまあいいんじゃない?
GITLAB_PERSONAL_TOKENは↓を見ながら発行。
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html

http?https?

色々あって、当Gitlabについては、自己署名証明書(=所謂オレオレ証明書)を用いて、httpsを実現しているのだが、dockerからのSSL解決との相性が恐ろしく悪いため、VPC内部のみhttpを許可するように変更した。これにより、GITLAB_API_ENDPOINTはhttpスキームになっている。
というか、やっぱりこんな迂回策を作っちゃだめで、ちゃんとドメインとか取るべきだ。
そのせいで、後述する作業が恐ろしくめんどくさくなった。

自動化

gitlab-runnerのインストール

まずはgitlab-runnerからである。
こんな感じのyamlを書く。

docker-compose.yml
version: "2.1"

services:
  runner:
    image: gitlab/gitlab-runner:alpine-v13.4.0
    volumes:
      - /data/docker-gitlab-runner/runner:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
      # 後述するが、ここはうまくいってない。
      - /data/docker-gitlab-runner/ssl/certs:/etc/ssl/certs
    restart: always

で、docker上でgitlabが動作しているEC2上でdocker-compose up -dでrunnerを起動
(Versionは単純にgitlabのVersionと合わせてあるだけ。)
https://docs.gitlab.com/runner/install/docker.html

gitlab-runnerの登録

起動したgitlab-runnerをgitlabから見えるように登録する。対話式の設定だったが、まあこれくらいはコード化しなくてもいいだろ的な。

[ec2-user@foo ]$ docker exec -it docker-gitlab-runner_runner_1 bash

bash-5.0# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=23 revision=4e1f20da version=13.4.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://hogehoge/gitlab
Please enter the gitlab-ci token for this runner:
XXXXXXXXXXXXXXXXXXXXXXX
Please enter the gitlab-ci description for this runner:
[3ad5a140c27f]:gitlab-ci
Please enter the gitlab-ci tags for this runner (comma separated):
shell
Registering runner... succeeded                     runner=z-5xs9LA
Please enter the executor: docker, parallels, docker+machine, docker-ssh+machine, kubernetes, custom, docker-ssh, shell, ssh, virtualbox:
docker
Please enter the default Docker image (e.g. ruby:2.6):
docker:stable
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

gitlab-ci tokenはSettings→CICD→Runnersから取得したものを設定する。

Trouble Shooting

結果的には、この時の設定はあまり意味なくって、/etc/gitlab-runner/config.toml を直接編集した。

config.toml
[session_server]
  session_timeout = 1800

[[runners]]
  name = "gitlab-ci"
  url = "http://hogehoge/gitlab"
  token = "XXXXXXXXXXXXXXXXXXXXXX"
  executor = "docker"
  clone_url = "http://hogehoge/gitlab"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

ポイントは、clone_urlとprivilegedの設定の箇所。

clone_url

元々はhttpsになってたと前述したが、そのせいで、gitlab-runnerを動作させると、最初にgit cloneするところで、SSL certificate problem: self signed certificateというエラーになる。これを対応するためにclone_urlを別途設定する。
https://docs.gitlab.com/runner/configuration/advanced-configuration.html

privileged

後述するが、docker in dockerを利用するため、dockerの特権モードをtrueにしておく。
https://gitlab-docs.creationline.com/ee/ci/docker/using_docker_build.html

gitlab側の設定

こんな感じで、ymlを書いて、gitlabに登録する。

.gitlab-ci.yml
variables:
        DOCKER_HOST: tcp://docker:2375/
        DOCKER_DRIVER: overlay2

stages:
        - post_deploy
generate-release-note:
        tags:
                - shell
        only:
                refs:
                        - tags
        stage: post_deploy
        image: docker:18-git
        services:
                - docker:18-dind
        script:
                - docker container run -e GITLAB_PERSONAL_TOKEN=XXXXXXXXXXXXXXXX \
                -e GITLAB_PROJECT_ID=${CI_PROJECT_ID} \
                -e GITLAB_API_ENDPOINT=http://hogehoge/gitlab/api/v4 \
                -e TARGET_BRANCH=master \
                -e TZ=Asia/Tokyo \
                00freezy00/gitlab-release-note-generator

Trouble shooting

dind

何も考えず、sample通りに動作させていたら、
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running? みたいなエラーが出る。
↓を参考にdocker imageの設定を変更することで、エラーを解消した。
https://forum.gitlab.com/t/gitlab-shared-runner-can-not-connect-to-docker-daemon-and-leaks-secrets/28298

tags

gitlab runnerのregister時に登録したtagを設定することで動作する。なので、以下のような記載の追加がgitlab-ci.yml側に必要。(勿論、tagを変更した場合はそれに対応して設定する。)

        tags:
                - shell

TZ

TZのDefaultがまさかの"Australia/Melbourne"だった(笑)、なので変更。

補足

dockerhubの以下を利用して動作させているが、ローカルで動作させたいときは、docker pullで取ってきて、buildする必要がある。
https://hub.docker.com/r/00freezy00/gitlab-release-note-generator

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?