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

Introduction to GitHub Actions

Introduction to GitHub Actions

* What is different GitHub Flow and Git Flow?
* What is GitHub Actions?
* How to write the simple workflow?
* What's problem in GitHub Actions UI?
* What's problem with Secrets in GitHub Actions?
* How to write your first GitHub Actions and upload to the marketplace?
* What's a problem with environment variables in GitHub Actions?

Buy me a coffee: https://www.buymeacoffee.com/appleboy
Blog: https://blog.wu-boy.com
Twitter: https://twitter.com/appleboy
Facebook: https://www.facebook.com/appleboy46
Slideshare: https://www.slideshare.net/appleboy
GitHub: https://github.com/appleboy

265bcbb56e831266de7a9f9281aab57a?s=128

Bo-Yi Wu

May 15, 2019
Tweet

Transcript

  1. Introduction to GitHub Actions 2019/05/15 Bo-Yi Wu https://github.com/appleboy

  2. About me • Software Engineer in Mediatek • Member of

    Drone CI/CD Platform • Member of Gitea Platform • Member of Gin Golang Framework • Teacher of Udemy Platform: Golang + Drone https://blog.wu-boy.com
  3. (JU)VC'MPX 14 Develop Git Push Git Tag Develop Git Push

    Git Tag Testing Deploy Deploy Deploy Production Staging Production Testing Deploy Staging
  4. GitHub Flow + Git Flow in opensource IUUQTHJUIVCDPNHPHJUFBHJUFB

  5. $*$%1MBUGPSN %SPOF 5SBWJT +FOLJOT (JU-BC $JSDMF $PEFTIJQ

  6. IUUQTHJUIVCDPNGFBUVSFTBDUJPOT #FUB

  7. IUUQTHJUIVCDPNNBSLFUQMBDF UZQFBDUJPOT .BSLFUQMBDF

  8. IUUQTEFWFMPQFSHJUIVCDPNBDUJPOT %FWFMPQFS(VJEF

  9. Container Based CI/CD Platform

  10. Current runtime resource • 1 virtual CPU • Up to

    3.75GB of memory • 100GB of disk space
  11. 28Events

  12. Write Simple Workflow

  13. |-- hello-world (repository) | |__ .github | |__ main.workflow |

  14. workflow "Remote ssh commands" { on = "push" resolves =

    [ "Remote ssh commands", ] } main.workflow
  15. action "Remote ssh commands" { uses = "appleboy/ssh-action@master" secrets =

    [ "HOST", "PASSWORD", ] args = [ "--user", "actions", "--script", "whoami", ] } main.workflow
  16. IUUQTHJUIVCDPNBQQMFCPZTTIBDUJPOBDUJPOT

  17. %PXOMPBEUIFEPDLFSJNBHFGPSDBDIJOH $BDIFMBZFS IUUQCJUMZEPDLFSDBDIFCVJME

  18. Scheduling a workflow ┌───────────── minute (0 - 59) │ ┌─────────────

    hour (0 - 23) │ │ ┌───────────── day of the month (1 - 31) │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ * * * * * workflow "New workflow" { on = "schedule(*/15 * * * *)" resolves = ["Hello World"] }
  19. What’s problem in UI?

  20. :PVDBO`UTFFUIFMPHJOQSPHSFTTKPC

  21. $BODFMMJOHXPSLqPX

  22. #VUZPVDBO`USFTUBSUUIFKPC http://www.thebrokeagent.com/wtf-listing-description-of-the-week/

  23. $ git reset —soft HEAD^ $ git commit -a -m

    ‘foo’ $ git push origin master -f 3FTUBSUUIFKPC
  24. Secrets in Github Actions Setting -> Secrets in left sidebar

  25. None
  26. action "Remote ssh commands" { uses = "appleboy/ssh-action@master" secrets =

    [ "HOST", "PASSWORD", ] args = [ "--user", "actions", "--script", "whoami", ] } main.workflow
  27. What’s problem in Secrets?

  28. Don’t support organization secrets duplicate of secrets in many repository

    of organization
  29. Don’t support thirty party secret service

  30. You need to write CLI flag in command drone-ssh -u

    foo -p foopass -s whoami drone-ssh -u bar -p barpass -s whoami
  31. main.workflow secrets = [ "PASSWORD", ] args = [ "--user",

    "actions", "--script", "whoami", ] secrets = [ "PASSWORD", ] args = [ "--user", "actions", "--script", "whoami", ] 4FSWFS 4FSWFS EPDLFSSVOF1"44803%YYYBQQMFCPZESPOFTTI VBDUJPOTTXIPBNJ
  32. main.workflow secrets = [ "PASSWORD01", ] args = [ "-p",

    "$PASSWORD01", "--script", "whoami", ] secrets = [ "PASSWORD02", ] args = [ "-p", "$PASSWORD02", "--script", "whoami", ] 4FSWFS 4FSWFS
  33. action "Publish" { needs = "Tag" uses = "actions/npm@master" args

    = "publish --access public" secrets = ["NPM_AUTH_TOKEN"] } IUUQTHJUIVCDPNBDUJPOTOQN
  34. How to add multiple auth token of npm registry?

  35. kind: pipeline name: default steps: - name: build image: appleboy/drone-ssh

    environment: USERNAME: from_secret: username PASSWORD: from_secret: password
  36. Creating GitHub Actions

  37. |-- ssh-action (repository) | |__ .github | |__ main.workflow |

    |__ Dockerfile | |__ entrypoint.sh | |__ README.md | |__ LICENSE
  38. Support any language you want

  39. Dockerfile

  40. FROM appleboy/drone-ssh:1.5.0-linux-amd64 # Github labels LABEL "com.github.actions.name"="SSH Commands" LABEL "com.github.actions.description"="some

    description" LABEL "com.github.actions.icon"="terminal" LABEL “com.github.actions.color"="gray-dark" LABEL "repository"="https://github.com/appleboy/ssh-action" LABEL "homepage"="https://github.com/appleboy" LABEL "maintainer"="Bo-Yi Wu <appleboy.tw@gmail.com>" LABEL "version"="0.0.1" ADD entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
  41. entrypoint.sh

  42. #!/bin/sh set -eu export GITHUB="true" sh -c "/bin/drone-ssh $*"

  43. action "Tag Docker Image" { needs = ["build"] uses =

    "actions/docker/cli@master" args = "tag hello:$GITHUB_SHA" }
  44. action "Tag Docker Image" { needs = ["build"] uses =

    "actions/docker/cli@master" args = ["tag", "hello:$GITHUB_SHA"] }
  45. Environment variables

  46. action "Hello World" { uses = "./my-action" env = {

    FIRST_NAME = "Mona" MIDDLE_NAME = "Lisa" LAST_NAME = "Octocat" } }
  47. runtime environment

  48. GitHub Variable • GITHUB_WORKFLOW • GITHUB_ACTION • GITHUB_EVNETNAME • GITHUB_SHA

    • GITHUB_REF
  49. I don’t know how to get the author email, name

    or commit message 3FTPMWFUIJTQSPCMFNVTJOH(JU)VC"1*SFRVFTU
  50. Publishing your action in the GitHub Marketplace

  51. FROM appleboy/drone-ssh:1.5.0-linux-amd64 # Github labels LABEL "com.github.actions.name"="SSH Commands" LABEL "com.github.actions.description"="some

    description" LABEL "com.github.actions.icon"="terminal" LABEL “com.github.actions.color"="gray-dark" LABEL "repository"="https://github.com/appleboy/ssh-action" LABEL "homepage"="https://github.com/appleboy" LABEL "maintainer"="Bo-Yi Wu <appleboy.tw@gmail.com>" LABEL "version"="0.0.1" ADD entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] QMFBTFNBLFTVSFUIBUUIFSFJTOPQSPCMFNXJUI%PDLFSpMFJO-"#&-
  52. Create New Tag and Publish Release

  53. IUUQTHJUIVCDPNNBSLFUQMBDFBDUJPOTTTIDPNNBOET

  54. Some action I created • appleboy/ssh-action • appleboy/scp-action • appleboy/facebook-action

    • appleboy/telegram-action • appleboy/jenkins-action • appleboy/gitlab-ci-ation • appleboy/discord-action
  55. IUUQCJUMZHPMBOH

  56. IUUQCJUMZESPOF

  57. Thank You