Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как перестать говорить "Ой, я забыл"

Как перестать говорить "Ой, я забыл"

Talk by Vadym Dehterov

Originally posted here: https://speakerdeck.com/degterev/kak-pieriestat-ghovorit-oi-ia-zabyl

В компании разработчиков становилось все больше, появлялось все больше правил и договоренностей, процессы и взаимодействия стали занимать слишком много времени. Мы решили автоматизировать всю рутину: от списка ворнингов при валидации PR до коментария в джиру с номером билда. Для этого мы использовали Danger и немного Jenkins pipeline. Расскажем о том, что можно делать с помощью Danger, и какие проблемы он помогает решать.

This talk was made for CocoaFriday #3 ( https://cocoaheads.org.ua/cocoafriday/3 ) which took place May 10, 2019

Video: https://youtu.be/GY8R2epsFIU

Db84cf61fdada06b63f43f310b68b462?s=128

CocoaHeads Ukraine

May 10, 2019
Tweet

Transcript

  1. Как перестать говорить «Ой, я забыл» Вадим Дегтерев

  2. None
  3. Поговорим про • Что за проблема то? • Пути решения

    • Как мы решили в итоге • Вопросы и вот это все
  4. • Посмотреть pull requests • Отправить билд qa • Поставить

    нужный пробельчик • Написать коммент в джиру • Посмотреть почему упали тесты Задач много а я один
  5. Нам нужна автоматизация

  6. Какие есть варианты? • Fastlane • Jenkins pipeline • Danger

  7. Fastlane • Подходит для решения наших задач • Не идеален

    потому что нужен для Deploy • Deploy должен работать всегда и везде
  8. Jenkins pipeline

  9. Jenkins pipeline Jenkinsfile node { stage('Build') { // } stage('Test')

    { // } stage('Deploy') { // } }
  10. Jenkins pipeline

  11. Jenkins pipeline Jenkinsfile node { stage('Build') { // } stage('Test')

    { // } stage('Deploy') { // } stage('Report') { def payload = JsonOutput.toJson([text : text, channel : channel, username : "JenkinsCI", attachments: attachments ]) sh "curl -X POST --data-urlencode \'payload=${payload}\' ${slackURL}" } }
  12. Github pull request builder Environment Variables The plugin makes some

    very useful environment variables available. • ghprbActualCommit • ghprbActualCommitAuthor • ghprbActualCommitAuthorEmail • ghprbPullDescription • ghprbPullId • ghprbPullLink • ghprbPullTitle • ghprbSourceBranch • ghprbTargetBranch • ghprbCommentBody • sha1
  13. Jira comment Jenkinsfile node { stage('Build') { // } stage('Test')

    { // } stage('Deploy') { // } stage('Report') { def payload = ... def jiraTicket = jiraTicket(env.ghprbPullTitle) sh "curl -X POST --data-urlencode \'payload=${payload}\' ${jiraURL}/browse/$ {jiraTicket}" } }
  14. Что с безопасностью? • Есть безопасное хранилище для ключей •

    Не нужно добавлять ключи в код • Ключи не попадут в логи
  15. Jenkins pipeline • Документация? • Модули, плагины, прям конструктор •

    Все пишется на Groovy • Можно просто вызывать скрипт из консоли
  16. Danger

  17. Dangerfile failure "Please add labels to this PR" if bitbucket_cloud.pr_labels.empty?

    message "Welcome, Kotya" if bitbucket_cloud.pr_author == “Kotya_Kolbaskin” warn "This PR does not have any assignees yet." if bitbucket_cloud.pr_json[:reviewers].length == 0
  18. Не забывайте обновить тесты tests_updated = !git.modified_files.grep(/Tests/).empty? if has_app_changes &&

    !tests_updated warn(“Test wasn’t updated”) end
  19. Swiftlint swiftlint.lint_files

  20. Swiftlint

  21. Xcode summary

  22. Ресурсы • https://fastlane.tools • https://danger.systems • https://github.com/danger/awesome-danger

  23. Контакты https://www.facebook.com/vadym.degterev.5 Telegram: @degterev Twitter: @degterev