BETA

GitLab CI/CD で一日一回データ収集する

投稿日:2020-03-25
最終更新:2020-03-26

やりたかったこと

  • 一日一回スクレイピングするスクリプトを走らせる
  • スクレイピングした結果はスクリプトを管理しているgitリポジトリに push する

やったこと

  • pythonでスクレイピング処理を書いた
  • gitlabでリポジトリ作成
  • 定期実行はGitLab の CI/CD の環境を整えたらできた

詰まったところ

■アクセストークンの設定
gitlabは CI/CD からであろうと、リポジトリにアクセスするにはトークンを発行する必要らしい。
アクセストークンは gitlab のアカウント設定から可能
アクセストークンを使ってgitlabのリポジトリにアクセスするときは

https://oauth2:<ACCESS_TOKEN>@gitlab.com/ACCOUNT_NAME>/<PROJECT_NAME>.git  

というフォーマットになるらしい。(oauth2:をつける、という書き方の一次情報が見つからない、Webで調べて出てきた他の記事を真似ただけなので、なにか勘違いしてないといいけど...)

■.gitlab-ci.yml の記述
CI/CDを使うにあたっての設定ファイル。こちらのqiitaが大変参考になりました
dockerを使ったことがなくて、手探りだった
軽くて人気らしいalpineのpython3用のバリエーションがあったので、それを使った
今回はスケジューラからのみ実行できればいいので、以下の構成で出来上がり。シンプル。

image: python:3-alpine  
execute:  
  script:  
    - . ./run_on_gitlabci.sh  
  only:  
    - schedules  

■run_on_gitlabci.sh の構成
.gitlab-ci.ymlで設定してある、実行ファイル本体。最終的にはスクレイピング処理(run.sh)を実行しているだけ。
ただし python-3:alpine が git を含んだ環境ではないので、そのインストールが必要なのと、
CI/CD上でgitを使うためのアクセストークン設定やgitのconfig設定が必要。最終形は以下の通り。

apk --update add git  
git config user.name <USER_NAME>  
git config user.email <EMAIL_ADDREESS>  
git remote set-url origin https://oauth2:<ACCESS_TOKEN>@gitlab.com/<ACCOUNT_NAME>/<PROJECT_NAME>.git  
git checkout master  
. ./run.sh  

スケジューラ設定

ここまでできていれば、あとはgitlabのサイトからスケジューラを設定できるので、cron形式で実行タイミングを指定してあげればOK。今回は一日一回、午前四時に実行することにした

0 4 * * *  

感想

ちょっとしたことが、簡単にできる今の時代は最高です。
ただ、簡単にできるために python, git, docker, cron などなど、浅くていいけど広い知識が必要になっていて、今っぽいことしてんな〜と思いながら組み終えました。

以上です

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

論文紹介、知った技術、競技プログラミング参戦記書いていきます

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう