Skip to content
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

test #2

Merged
merged 1 commit into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
uses: docker/build-push-action@v5
with:
push: 'true'
tags: 'ghcr.io/${{ github.repository }}/${{ github.ref_name }}:latest'
tags: 'ghcr.io/${{ github.repository }}/${{ github.head_ref }}:latest'
context: 'frontend'

deploy:
Expand All @@ -63,7 +63,7 @@ jobs:
needs: [build]
env:
TF_VAR_revision_suffix: ${{ github.sha }}
TF_VAR_my_name: ${{ github.ref_name }}
TF_VAR_my_name: ${{ github.head_ref }}
TF_VAR_repository: ${{ github.repository }}
ARM_CLIENT_ID: ${{ vars.ARM_CLIENT_ID }}
ARM_SUBSCRIPTION_ID: ${{ vars.ARM_SUBSCRIPTION_ID }}
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/destroy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
env:
TF_VAR_revision_suffix: ${{ github.sha }}
TF_VAR_my_name: ${{ github.ref_name }}
TF_VAR_my_name: ${{ github.head_ref }}
TF_VAR_repository: ${{ github.repository }}
ARM_CLIENT_ID: ${{ vars.ARM_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
Expand All @@ -33,5 +33,6 @@ jobs:
- name: Delete workspace and destroy resources
run: |
(terraform workspace select $MY_NAME && \
terraform destroy -auto-approve && \
terraform destroy -auto-approve && \
terraform workspace delete $MY_NAME) || echo "No workspace to destroy"
164 changes: 70 additions & 94 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

Lær hvordan du [deployer](https://teknisk-ordbok.fly.dev/ordbok/Deploy) koden din til [prod](https://teknisk-ordbok.fly.dev/ordbok/Produksjon)!

# 🐳 Docker
# 🐳 1. Docker

## 📖 Før du begynner

Installer Docker [herfra](https://docs.docker.com/engine/install).

## 🔨 Oppgave 1.1

Prøv å bygg et Docker image slik:
Prøv og bygg et Docker image slik:

```bash
cd frontend
Expand All @@ -20,7 +20,7 @@ docker build . -t devops-workshop:latest
Du ser at den feiler, og det virker som den mangler en fil (eller filer?) for å bygge frontend'en.
Legg til det som mangler i `COPY`-steget i filen [Dockerfile](frontend/Dockerfile).

*HINT:* Vi bruker **yarn** for å bygge frontend'en.
_HINT:_ Vi bruker **yarn** for å bygge frontend'en.

<details>
<summary>✨ Se fasit</summary>
Expand All @@ -45,35 +45,49 @@ ENTRYPOINT ["yarn", "serve"]

## 🔨 Oppgave 1.2

Prøv å kjør applikasjonen med denne kommandoen:
Prøv og kjør applikasjonen med denne kommandoen:

```bash
docker run -it -p 3000:3000 devops-workshop:latest
```

Da skal du kunne gå i nettleseren og se noe på `http://localhost:3000`!
Da skal du kunne gå i nettleseren og se noe på [http://localhost:3000](http://localhost:3000)!


# ▶️ GitHub Actions
# ▶️ 2. GitHub Actions

Disse oppgavene gjøres i filen [deploy.yml](.github/workflows/deploy.yml).

## 📖 Før du begynner

Sjekk ut en git branch med navnet ditt:
Sjekk ut en git branch med navnet ditt, f.eks.:

```bash
git checkout -b andreas-bakseter
```

**DET ER VIKTIG AT INGEN ANDRE HAR EN BRANCH MED SAMME NAVN!**
**PASS PÅ AT INGEN ANDRE HAR EN BRANCH MED SAMME NAVN SOM DEG!**

Hver gang du vil teste endringer, push branchen din til GitHub:

```bash
git push -u origin andreas-bakseter
```

...og lag en pull request mot `master`-branchen.

Da vil du se at GitHub Actions vil kjøre jobbene dine, og du kan se output.
Hver gang du vil teste endringer, push branchen din til GitHub.

_TIPS:_ istedenfor å lage flere commits, kan du bruke `git add .` og `git commit --amend` for å legge til nye endringer i forrige commit,
for å så pushe med `git push --force`. Dette er en god praksis for å holde git-historikken ren når du til slutt merger til `master`.

## 🔨 Oppgave 2.1

Vi vil gjerne kjøre testene våre for frontend'en i GitHub Actions, men vi mangler noen steg.
Vi vil gjerne kjøre testene våre for frontend'en i GitHub Actions, men vi mangler noen steg i jobben `run-tests`.
Fyll ut stegene som mangler for å kjøre testenen til frontend'en.
Det er bare å pushe til branchen din og se om det fungerer underveis!

*HINT:* Se hvordan de andre jobbene definerer steg (i listen under `steps`).
_HINT:_ Se hvordan de andre jobbene definerer steg (i listen under `steps`).

<details>
<summary>✨ Se fasit</summary>
Expand All @@ -89,6 +103,7 @@ run_tests:
- name: Checkout repository
uses: actions/checkout@v4

# legger til disse stegene:
- name: Install dependencies
run: yarn install

Expand All @@ -100,53 +115,69 @@ run_tests:

## 🔨 Oppgave 2.2

Vi vil også at bygg-steget ikke skal starte før testene har kjørt og har passert.
Se på **Summary** på din action i GitHub UI'en.
Den finner du ved å enten trykke på **Show all checks** og så **Details** på en pull request,
eller gå [hit](https://github.com/baksetercx/devops-workshop/actions) og finn din workflow run.

Du vil da se at det ikke er noen kobling mellom stegene som kjører testene og stegene som bygger Docker image.
Vi vil at bygg-steget ikke skal starte før testene har kjørt og har passert.
Endre det slik at bygg-steget avhenger av test-steget for å kunne kjøre.

Dobbeltsjekk til slutt at bygg-steget kjører etter test-steget ved å se på **Summary** i GitHub Actions UI'en.

<details>
<summary>✨ Se fasit</summary>

```yaml
build:
name: 'Build Docker image and push to registry'
depends-on: [set_name, run_tests]
needs: [run-tests] # legger til denne linjen
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: 'ghcr.io'
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push image to registry
uses: docker/build-push-action@v5
with:
push: 'true'
tags: '${{ env.MY_NAME }}-latest'
file: './frontend/Dockerfile'
tags: 'ghcr.io/${{ github.repository }}/${{ github.head_ref }}:latest'
context: 'frontend'
```

</details>

# 🏗️ Terraform
# 🏗️ 3. Terraform

## 📖 Før du begynner

Installer Terraform [her](https://developer.hashicorp.com/terraform/install).

For å kunne kjøre Terraform lokalt kjøre denne kommandoen i mappen [terraform](terraform):

```bash
terraform init
```
I denne workshoppen har dere ikke mulighet til å kjøre Terraform lokalt,
men du kan pushe til branch'en din og se på output fra GitHub Actions.

## 🔨 Oppgave 3.1


Se på output fra GitHub Actions i steget `deploy`. Her kan du se hva Terraform har tenkt til å lage.

## 🔨 Oppgave 3.2

Legg til en `template.container` i `azurerm_container_app`-ressursen i filen [main.tf](terraform/main.tf).
Det mangler noen felter i `azurerm_container_app`-ressursen i filen [main.tf](terraform/main.tf).
Legg til de feltene som mangler for å kunne deploye applikasjonen.
Push til branchen din og se om det fungerer!

_HINT:_ Les [dokumentasjonen](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/container_app) til `azurerm_container_app`.

<details>
<summary>✨ Se fasit</summary>
Expand All @@ -160,10 +191,12 @@ resource "azurerm_container_app" "devops" {

template {
container {
name = "devops-workshop"
image = "ghcr.io/computas/devops-workshop/${var.my_name}:latest"
# legger til disse feltene:
name = "devops-workshop"
cpu = "0.25"
memory = "0.5Gi"
#
}

min_replicas = 1
Expand All @@ -182,6 +215,7 @@ resource "azurerm_container_app" "devops" {
}
}
```

## 🔨 Oppgave 3.3

Vi har lyst til å deploye med Terraform.
Expand Down Expand Up @@ -219,82 +253,24 @@ deploy:
run: teraform workspace new $MY_NAME || terraform workspace select $MY_NAME

- name: Run Terraform apply
run: terraform apply -auto-approve
```

</details>

## 🔨 Oppgave 2.4

Push branchen din til GitHub og sjekk ut om den kjører.


# 🏗️ Terraform

## 📖 Før du begynner

Installer Terraform [her](https://developer.hashicorp.com/terraform/install).

I denne workshoppen har dere ikke mulighet til å kjøre Terraform lokalt,
men du kan pushe til branch'en din og se på output fra GitHub Actions.

## 🔨 Oppgave 3.1

Se på output fra GitHub Actions i steget `deploy`. Her kan du se hva Terraform har tenkt til å lage.

## 🔨 Oppgave 3.2

Legg til en `template.container` i `azurerm_container_app`-ressursen i filen [main.tf](terraform/main.tf).

<details>
<summary>✨ Se fasit</summary>

```hcl
resource "azurerm_container_app" "devops" {
name = "${var.my_name}-app"
container_app_environment_id = azurerm_container_app_environment.backend_env.id
resource_group_name = azurerm_resource_group.devops
revision_mode = "Single"

template {
container {
name = "devops-workshop"
image = "ghcr.io/computas/devops-workshop/${var.my_name}:latest"
cpu = "0.25"
memory = "0.5Gi"
}

min_replicas = 1
max_replicas = 1
revision_suffix = substr(var.revision_suffix, 0, 10)
}

ingress {
target_port = "3000"
external_enabled = true

traffic_weight {
percentage = 100
latest_revision = true
}
}
}
run: terraform apply -auto-approve # legger til denne linjen
```

</details>

# Setup (ikke en del av workshop'en)
# 🤓 Setup for spesielt interesserte (ikke en del av workshop'en)

1. Få tak i en Azure subscription. Pass på at provider `Microsoft.App` er registrert i subscription'en din.
Se [her](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-register-resource-provider?tabs=azure-cli) for mer informasjon,
evt. kjør kommandoen `az provider register --namespace Microsoft.App` for å registrere den.
Se [her](https://learn.microsoft.com/en-us/azure/azure-resource-manager/troubleshooting/error-register-resource-provider?tabs=azure-cli) for mer informasjon,
og evt. kjør kommandoen `az provider register --namespace Microsoft.App` for å registrere den.

2. Lag en ny Storage Account i Azure for å lagre Terraform state.
Bruk skriptet `bootstrap.sh` for å sette opp en ny Storage Account, som vil lages i resource group `tfstate`.
Bruk skriptet `bootstrap.sh` for å sette opp en ny Storage Account, som vil lages i resource group `tfstate`.

3. Lag en App Registration i Entra, og pek den mot riktig GitHub repository/environment. Se [link]().
Du kan bruke `prod` som environment, det er det som brukes i `.github/workflows/deploy.yml`.
Gi den `Contributor`-tilgang til subscription'en din.
3. Lag en App Registration i Entra ID manuelt, og pek den mot riktig GitHub repository/environment,
se [her](https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure) for mer informasjon.
Du kan bruke `prod` som environment, det er det som brukes i `.github/workflows/deploy.yml`.
Gi den `Contributor`-tilgang til subscription'en din.

4. Hent ut client ID fra App Registration og legg den i GitHub repository variables under `ARM_CLIENT_ID`.
Hent også ut subscription ID og tentant ID og legg de i GitHub repository variables under `ARM_SUBSCRIPTION_ID` og `ARM_TENANT_ID`.
Hent også ut subscription ID og tentant ID og legg de i GitHub repository variables under `ARM_SUBSCRIPTION_ID` og `ARM_TENANT_ID`.
13 changes: 5 additions & 8 deletions terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,16 @@ resource "azurerm_container_app" "devops" {
revision_mode = "Single"

template {
# Task T.2:
#
# container {
# image = "ghcr.io/${var.repository}/${var.my_name}:latest"
}
# Answer T.2:
container {
name = "devops-workshop"
image = "ghcr.io/${var.repository}/${var.my_name}:latest"
# Task T.2:
#
# Answer T.2:
name = "devops-workshop"
cpu = "0.25"
memory = "0.5Gi"
#
}
#

min_replicas = 1
max_replicas = 1
Expand Down
Loading