Π”Π΅ΠΏΠ»ΠΎΠΉ Π² сloud.ru

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ рассмотрСн Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Container Apps (cloud.ru) с использованиСм GitVerse CI/CD.

Container Apps β€” это сСрвис ΠΎΡ‚ сloud.ru для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ см. Π² сloud.ru.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… GitVerse CI/CD Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Container Apps позволяСт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ GitVerse-спСцифичныС инструмСнты ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ workflow

ВрСбования

  1. Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ Docker-ΠΎΠ±Ρ€Π°Π·:

    • оТидаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· ΡƒΠΆΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² рССстрС;
    • ΠΏΡ€ΠΈΠΌΠ΅Ρ€: gitverse.ru/actions/gitverse_hello:container_app;
    • ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π·: .gitverse/workflows/docker/cloud-hosted-runner/push-registries.yaml.
  2. Доступ ΠΊ Container App:

    • трСбуСтся доступ ΠΊ рССстру cloud.ru;
    • Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ сСкрСты: CLOUD_RU_REGISTRY, CLOUD_RU_USERNAME, CLOUD_RU_PASSWORD, CLOUD_RU_PROJECT_ID.
  3. Зависимости:

    • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ кастомноС дСйствиС: actions/evo-container-app-action@v5;
    • Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Go >=1.23 для Ρ€Π°Π±ΠΎΡ‚Ρ‹ (устанавливаСтся Ρ‡Π΅Ρ€Π΅Π· setup-go).
  4. Dockerfile:

    • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ: ./distribution/container_app.Dockerfile;
    • ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΏΠΎΡ€Ρ‚ΠΎΠ²;
    • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹: 8080, 8443 ΠΈ Ρ‚.Π΄. (Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ список β€” Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ cloud.ru);
    • ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
      EXPOSE 8080
      CMD ["your-app", "--port=8080"]
    • Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ, Π½Π΅ входящСм Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ список β€” ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступно.
  5. Container App:

    • ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, ID ΡƒΠΊΠ°Π·Π°Π½ Π² сСкрСтС: CLOUD_RU_PROJECT_ID;
    • action автоматичСски создаСт ΠΈΠ»ΠΈ обновляСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅;
    • Π½Π°Π·Π²Π°Π½ΠΈΠ΅ прилоТСния: container-app-gitverse-hello;
    • ΠΏΠΎΡ€Ρ‚ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ: 8080 (соотвСтствуСт трСбованиям ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹).
  6. Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ:

    • послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ дСплоя ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅: https://container-app-gitverse-hello.containerapps.ru;
    • Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния.

Workflow

on:
  workflow_dispatch:
 
jobs:
  # Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ публикация ΠΎΠ±Ρ€Π°Π·Π° для container-app
  build-push-image:
    name: Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ публикация Docker-ΠΎΠ±Ρ€Π°Π·Π°
    runs-on: ubuntu-latest
 
    steps:
      - name: ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
        uses: actions/checkout@v4
 
      - name: Prepare Kaniko credentials
        run: |
          mkdir -p "${{ gitverse.workspace }}/.docker"
          
          # ΠšΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ username:password Π² base64
          AUTH=$(echo -n "${{ secrets.CLOUD_RU_USERNAME }}:${{ secrets.CLOUD_RU_PASSWORD }}" | base64 -w0)
          
          # БоздаСм config.json с credentials
          cat > "${{ gitverse.workspace }}/.docker/config.json" <<EOF
          {
            "auths": {
              "${{ secrets.CLOUD_RU_REGISTRY }}": {
                "auth": "${AUTH}"
              }
            }
          }
          EOF
          
          chmod 600 "${{ gitverse.workspace }}/.docker/config.json"
          echo "βœ… Created config at ${{ gitverse.workspace }}/.docker/config.json"
        shell: bash
 
      - name: Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· Kaniko
        uses: docker://gcr.io/kaniko-project/executor:v1.24.0
        env:
          DOCKER_CONFIG: ${{ gitverse.workspace }}/.docker
        with:
          args: >-
            --context=dir://${{ gitverse.workspace }}/distribution
            --dockerfile=container-app.Dockerfile
            --destination=${{ secrets.CLOUD_RU_REGISTRY }}/gitverse_hello:container_app
            --verbosity=info
 
  # Π”Π΅ΠΏΠ»ΠΎΠΉ Π² Container App
  up-container-app:
    name: Π”Π΅ΠΏΠ»ΠΎΠΉ Π² Container App
    needs: build-push-image
    runs-on: ubuntu-latest
 
    steps:
      - name: Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Container App
        uses: actions/evo-container-app-action@v1
        with:
          client_id: ${{ secrets.CLOUD_RU_USERNAME }}
          client_secret: ${{ secrets.CLOUD_RU_PASSWORD }}
          registry_uri: ${{ secrets.CLOUD_RU_REGISTRY }}
          image_name: gitverse_hello
          tag_name: container_app
          project_id: ${{ secrets.CLOUD_RU_PROJECT_ID }}
          name: container-app-gitverse-hello
          port: 8080

ОписаниС шагов workflow

1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория.

  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный action actions/checkout@v4 для получСния исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

2. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для Docker рССстра.

  • создаСтся ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .docker/config.json с ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² рССстрС cloud.ru;
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ сСкрСты CLOUD_RU_REGISTRY, CLOUD_RU_USERNAME, CLOUD_RU_PASSWORD.

3. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ публикация ΠΎΠ±Ρ€Π°Π·Π° Ρ‡Π΅Ρ€Π΅Π· Kaniko.

  • выполняСтся сборка Docker-ΠΎΠ±Ρ€Π°Π·Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Kaniko;
  • ΠΎΠ±Ρ€Π°Π· публикуСтся Π² рССстрС cloud.ru с Ρ‚Π΅Π³ΠΎΠΌ container_app;
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ контСкст ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ distribution ΠΈ Dockerfile distribution/container-app.Dockerfile.

4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ прилоТСния Π² Container App.

  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ кастомноС дСйствиС actions/evo-container-app-action@v1;
  • устанавливаСтся Go вСрсии >=1.23;
  • настраиваСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Container App с использованиСм сСкрСтов;
  • создаСтся ΠΈΠ»ΠΈ обновляСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ container-app-gitverse-hello Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 8080;
  • action автоматичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ созданиС ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ рСсурса Π² Container Apps.

Π’Ρ‹ нашли Ρ‡Ρ‚ΠΎ искали?