0% found this document useful (0 votes)
56 views

Github Actions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
56 views

Github Actions

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 57

Introduction to

GitHub Actions
2019/05/15
Bo-Yi Wu
https://github.com/appleboy
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
Develop

Git Push Deploy


Staging
Testing
Git Tag Deploy
Production

Develop

Git Push Deploy


Staging
Testing
Git Tag Deploy
14
Production
GitHub Flow + Git Flow
in opensource
Container Based
CI/CD Platform
Current runtime resource
•1 virtual CPU

• Up to 3.75GB of memory

• 100GB of disk space


28 Events
Write Simple Workflow
|-- hello-world (repository)
| |__ .github
| |__ main.workflow
|
main.workflow
workflow "Remote ssh commands" {
on = "push"
resolves = [
"Remote ssh commands",
]
}
main.workflow
action "Remote ssh commands" {
uses = "appleboy/ssh-action@master"
secrets = [
"HOST",
"PASSWORD",
]
args = [
"--user", "actions",
"--script", "whoami",
]
}
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"]
}
What’s problem in UI?
http://www.thebrokeagent.com/wtf-listing-description-of-the-week/
$ git reset —soft HEAD^
$ git commit -a -m ‘foo’
$ git push origin master -f
Secrets in Github Actions
Setting -> Secrets in left sidebar
main.workflow
action "Remote ssh commands" {
uses = "appleboy/ssh-action@master"
secrets = [
"HOST",
"PASSWORD",
]
args = [
"--user", "actions",
"--script", "whoami",
]
}
What’s problem in Secrets?
Don’t support
organization secrets
duplicate of secrets in many repository of organization
Don’t support
thirty party
secret service
You need to write
CLI flag in command
drone-ssh -u foo -p foopass -s whoami
drone-ssh -u bar -p barpass -s whoami
main.workflow

secrets = [ secrets = [
"PASSWORD", "PASSWORD",
] ]
args = [ args = [
"--user", "actions", "--user", "actions",
"--script", "whoami", "--script", "whoami",
] ]
main.workflow

secrets = [ secrets = [
"PASSWORD01", "PASSWORD02",
] ]
args = [ args = [
"-p", "$PASSWORD01", "-p", "$PASSWORD02",
"--script", "whoami", "--script", "whoami",
] ]
action "Publish" {
needs = "Tag"
uses = "actions/npm@master"
args = "publish --access public"
secrets = ["NPM_AUTH_TOKEN"]
}
How to add multiple
auth token
of npm registry?
kind: pipeline
name: default

steps:
- name: build
image: appleboy/drone-ssh
environment:
USERNAME:
from_secret: username
PASSWORD:
from_secret: password
Creating GitHub Actions
|-- ssh-action (repository)
| |__ .github
| |__ main.workflow
| |__ Dockerfile
| |__ entrypoint.sh
| |__ README.md
| |__ LICENSE
Support any language you want
Dockerfile
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"]
entrypoint.sh
#!/bin/sh

set -eu

export GITHUB="true"

sh -c "/bin/drone-ssh $*"
action "Tag Docker Image" {
needs = ["build"]
uses = "actions/docker/cli@master"
args = "tag hello:$GITHUB_SHA"
}
action "Tag Docker Image" {
needs = ["build"]
uses = "actions/docker/cli@master"
args = ["tag", "hello:$GITHUB_SHA"]
}
Environment variables
action "Hello World" {
uses = "./my-action"
env = {
FIRST_NAME = "Mona"
MIDDLE_NAME = "Lisa"
LAST_NAME = "Octocat"
}
}
runtime environment
GitHub Variable

• GITHUB_WORKFLOW

• GITHUB_ACTION

• GITHUB_EVNETNAME

• GITHUB_SHA

• GITHUB_REF
I don’t know how to
get the author
email, name or
commit message
Publishing your action
in the GitHub Marketplace
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"]
Create New Tag and
Publish Release
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
Thank You

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy