ΠΠ΅ΠΏΠ»ΠΎΠΉ Π² Ρloud.ru
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Container Apps (cloud.ru) Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ GitVerse CI/CD.
Container Apps β ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΎΡ Ρloud.ru Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. Π² Ρloud.ru.
Π ΡΠ°ΠΌΠΊΠ°Ρ GitVerse CI/CD Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Container Apps ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ GitVerse-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ.
ΠΡΠΈΠΌΠ΅Ρ workflow
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
-
Π‘ΠΎΠ±ΡΠ°Π½Π½ΡΠΉ Docker-ΠΎΠ±ΡΠ°Π·:
- ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ°Π· ΡΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² ΡΠ΅Π΅ΡΡΡΠ΅;
- ΠΏΡΠΈΠΌΠ΅Ρ:
gitverse.ru/actions/gitverse_hello:container_app; - ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π·:
.gitverse/workflows/docker/cloud-hosted-runner/push-registries.yaml.
-
ΠΠΎΡΡΡΠΏ ΠΊ Container App:
- ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π΅ΡΡΡΡ cloud.ru;
- Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΠΊΡΠ΅ΡΡ:
CLOUD_RU_REGISTRY,CLOUD_RU_USERNAME,CLOUD_RU_PASSWORD,CLOUD_RU_PROJECT_ID.
-
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅:
actions/evo-container-app-action@v5; - ΡΡΠ΅Π±ΡΠ΅Ρ Go >=1.23 Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ (ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π·
setup-go).
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅:
-
Dockerfile:
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ:
./distribution/container_app.Dockerfile; - ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»ΡΡΠ°ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΏΠΎΡΡΠΎΠ²;
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠΎΡΡΡ: 8080, 8443 ΠΈ Ρ.Π΄. (ΡΠΎΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ β Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ cloud.ru);
- ΠΏΡΠΈΠΌΠ΅Ρ:
EXPOSE 8080 CMD ["your-app", "--port=8080"] - Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΡΡΠ°Π΅Ρ Π½Π° ΠΏΠΎΡΡΡ, Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΌ Π² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ β ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ.
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ:
-
Container App:
- ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ, ID ΡΠΊΠ°Π·Π°Π½ Π² ΡΠ΅ΠΊΡΠ΅ΡΠ΅:
CLOUD_RU_PROJECT_ID; - action Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅;
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
container-app-gitverse-hello; - ΠΏΠΎΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: 8080 (ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ).
- ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ, ID ΡΠΊΠ°Π·Π°Π½ Π² ΡΠ΅ΠΊΡΠ΅ΡΠ΅:
-
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ:
- ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅: 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ΠΈ Dockerfiledistribution/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.