-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create a staging workflow #1
base: main
Are you sure you want to change the base?
Conversation
…rkflows/deploy-staging.yml trigger build
It looks like you took an action I didn't expect. I expected you to commit the file |
correct typo in pull-request
Job conditionalsGitHub Actions features powerful controls for when to execute jobs and the steps within them. One of these controls is Using information within GitHubWorkflows are part of the GitHub ecosystem, so each workflow run gives you access to a rich set of data that you can use to take fine-grained control. We'd like to run our workflow on a specific label name, suppose that it's peacock. We can run the workflow based on that label name with the following single line that packs a punch:
Step 2: Trigger a job on specific labelsLet's put all this together to run our job only when a labeled named "stage" is applied to the pull request. ⌨️ Activity: Add a conditional to select from labels
Your results should look like this: name: Stage the app
on:
pull_request:
types: [labeled]
env:
DOCKER_IMAGE_NAME: petetian-azure-ttt
IMAGE_REGISTRY_URL: docker.pkg.github.com
#################################################
### USER PROVIDED VALUES ARE REQUIRED BELOW ###
#################################################
#################################################
### REPLACE USERNAME WITH GH USERNAME ###
AZURE_WEBAPP_NAME: petetian-ttt-app
#################################################
jobs:
build:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'stage') I'll respond when you push a commit on this branch. |
add conditions and env
Workflow stepsSo far, the workflow knows what the trigger is and what environment to run in. But, what exactly is supposed to run? The "steps" section of this workflow specifies actions and scripts to be run in the Ubuntu environment when new labels are added. Step 3: Set up the environment for your appWe won't be going into detail on the steps of this workflow, but it would be a good idea to become familiar with the actions we're using. They are: The course Using GitHub Actions for CI also teaches how to use most of these actions in details. ⌨️ Activity: Store your credentials in GitHub secrets and finish setting up your workflow
If you'd like to copy the full workflow file, it should look like this: name: Stage the app
on:
pull_request:
types: [labeled]
env:
DOCKER_IMAGE_NAME: petetian-azure-ttt
IMAGE_REGISTRY_URL: docker.pkg.github.com
#################################################
### USER PROVIDED VALUES ARE REQUIRED BELOW ###
#################################################
#################################################
### REPLACE USERNAME WITH GH USERNAME ###
AZURE_WEBAPP_NAME: petetian-ttt-app
#################################################
jobs:
build:
if: contains(github.event.pull_request.labels.*.name, 'stage')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@main
with:
name: webpack artifacts
path: public/
Build-Docker-Image:
runs-on: ubuntu-latest
needs: build
name: Build image and store in GitHub Packages
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Download built artifact
uses: actions/download-artifact@main
with:
name: webpack artifacts
path: public
- name: create image and store in Packages
uses: mattdavis0351/actions/[email protected]
with:
repo-token: ${{secrets.GITHUB_TOKEN}}
image-name: ${{env.DOCKER_IMAGE_NAME}}
Deploy-to-Azure:
runs-on: ubuntu-latest
needs: Build-Docker-Image
name: Deploy app container to Azure
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/docker-login@v1
with:
login-server: ${{env.IMAGE_REGISTRY_URL}}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy web app container
uses: azure/webapps-deploy@v2
with:
app-name: ${{env.AZURE_WEBAPP_NAME}}
images: ${{env.IMAGE_REGISTRY_URL}}/${{ github.repository }}/${{env.DOCKER_IMAGE_NAME}}:${{ github.sha }}
- name: Azure logout
run: |
az logout I'll respond when you push a commit on this branch. |
Welcome to the course!
We'll learn how to create a workflow that enables Continuous Delivery. You'll:
Before you start, you should be familiar with GitHub and Continuous Integration. If you aren't sure where to start, you may want to check out these two Learning Lab courses:
What is Continuous Delivery?
Martin Fowler defined Continuous Delivery very simply in a 2013 post as follows:
A lot of things go into delivering "continuously". These things can range from culture and behavior to specific automation. In this course, we're going to focus on deployment automation.
Setting up environments and kicking off deployments
Automation works at its best when a set of triggers work harmoniously to set up and deploy to target environments. Engineers at many companies, like at GitHub, typically use a ChatOps command as a trigger. The trigger itself isn't incredibly important.
In our use case, we'll use labels as triggers for multiple tasks:
For now, we'll focus on staging. We'll spin up and destroy our environment in a later step.
Step 1: Configure a trigger based on labels
In a GitHub Actions workflow, the
on
step defines what causes the workflow to run. In this case, we want the workflow to run whenever a label is applied to the pull request.⌨️ Activity: Configure the workflow trigger based on a label being added
deploy-staging.yml
file on this branch, or use this quick link (We recommend opening the quick link in another tab)CHANGETHIS
toworkflows
, so the title of this file with the path is.github/workflows/deploy-staging.yml
. If you're working on the GitHub.com user interface, see the suggestion below for how to rename.build
on a labelChanging the name of a directory
If you're working locally, rename your file or drag-and-drop the file into the proper directory as you'd normally do. If you're working on GitHub.com, you can change the name of a directory by changing its filename and using the Backspace key until you reach the directory, as follows:
/
to let GitHub know this should be a new directory.Your resulting file should be in
.github/workflows/deploy-staging.yml
and it should look like this:I'll respond when you push a commit on this branch.