Speee社のコーヒーが最高に美味しかった。開発体験について考えを深められました。@hatappi さん, @__gfx__ さん、ありがとうございました🙏(また機会があったら話をしに行きたい)
— 悟りのカルパス (@yoshi_hirano) September 21, 2018
今週の金曜日にケバブを食べながら開発体験などなどを話すランチをした
これは良い場なので今後もやっていきたい!
このランチの中の話の一つにgemのupdateをどれくらいの周期でやっているかの話が出た
- 気づいたタイミング
- 1週間に一回
後は手動でやってるとかCIでやってるとか
この時そういえば個人サービスのgem全然updateしてないなと思った
個人サービスは毎日開発するものでもないし複数個あるので、気づいた時にやろうはやらないやつなので良い感じの方法を探した
CIはCircleCIを使っているのでschedule使えば良い感じに出来そうじゃんと思ったらgemがあったのでそれを導入した
導入も簡単でGithubのpersonal access tokenを発行してCircleCIのProjectに設定して後は.circleci/config.yml
を良い感じに設定するだけ
↓に実際に作ったyamlを置いています
version: 2 jobs: build: docker: - image: ruby:2.5.1-alpine environment: RAILS_ENV: test DB_HOST: '127.0.0.1' DB_USERNAME: root DB_PASSWORD: '' - image: circleci/mysql:5.7 working_directory: ~/repo steps: - run: &setup_requirements name: Install dependencies command: | apk add --update --no-cache \ git \ openssh-client \ tar \ gzip \ ca-certificates \ tzdata \ yarn \ gcc \ build-base \ libxml2-dev \ libxslt-dev \ mysql-dev - run: &set_timezone name: Set timezone to Asia/Tokyo command: cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime - checkout - restore_cache: &restore_gems_cache name: Restore bundler cache keys: - gems-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }} - gems-{{ .Environment.COMMON_CACHE_KEY }}- - run: name: Install Ruby Dependencies command: | bundle check || bundle install --jobs=4 --retry=3 bundle clean - save_cache: &save_gems_cache name: Save bundler cache key: gems-{{ .Environment.COMMON_CACHE_KEY }}-{{ checksum "Gemfile.lock" }} paths: - /usr/local/bundle - restore_cache: name: Restore Yarn Package Cache keys: - yarn-packages-{{ checksum "yarn.lock" }} - run: name: Install Dependencies command: yarn install - save_cache: name: Save Yarn Package Cache key: yarn-packages-{{ checksum "yarn.lock" }} paths: - ~/.cache/yarn - run: name: Run rubocop command: bundle exec rubocop - run: name: Check Prettier command: yarn run fmt-check - run: name: Setup DB command: bundle exec rails db:create db:migrate - run: name: Run Rspec command: bundle exec rspec spec continuous_bundle_update: docker: - image: ruby:2.5.1-alpine working_directory: ~/repo steps: - run: *setup_requirements - run: *set_timezone - checkout - restore_cache: *restore_gems_cache - run: name: Setup requirements for continuous bundle update command: gem install -N circleci-bundle-update-pr - deploy: name: Continuous bundle update command: circleci-bundle-update-pr hatappi hatappi@hatappi.me $CIRCLE_BRANCH workflows: version: 2 build: jobs: - build nightly: triggers: - schedule: cron: "00 10 * * 5" filters: branches: only: master jobs: - continuous_bundle_update
build jobはpushしたりした時に実行する方で今回良い感じにgem updateのPRを作ってくれるのは continuous_bundle_update
job
これを nightly
のscheduleで設定しているcronの時間に従って起動している
※ cronはUTCで設定される
ちなみにこの設定だとmasterブランチのみで日本時間で金曜日の19時にしか実行されないので動作テストをしておきたい
CircleCIはAPIを提供してくれているので、これを使ってテストしました
$ curl -u 11111111111111111111: \ -d build_parameters[CIRCLE_JOB]=continuous_bundle_update \ https://circleci.com/api/v1.1/project/github/hatappi/hoge/tree/circleci-bundle-update-pr