Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:gh_actions [2024/01/26 09:23] admin |
develop:gh_actions [2024/02/19 03:46] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== GitHub Actions ====== | ====== GitHub Actions ====== | ||
- | |||
===== Введение ===== | ===== Введение ===== | ||
Строка 11: | Строка 10: | ||
Можно работать в онлайн редакторе\\ | Можно работать в онлайн редакторе\\ | ||
</ | </ | ||
- | |||
Строка 23: | Строка 21: | ||
Может быть вызван автоматически, | Может быть вызван автоматически, | ||
- | |||
Пример workflow:\\ | Пример workflow:\\ | ||
<code yaml> | <code yaml> | ||
Строка 48: | Строка 45: | ||
- | ==== Jobs ==== | ||
+ | ==== Jobs ==== | ||
+ | " | ||
< | < | ||
Строка 117: | Строка 115: | ||
</ | </ | ||
+ | |||
+ | |||
+ | ==== Actions ==== | ||
+ | Вместо инструкции " | ||
< | < | ||
- | < | + | < |
+ | Например популярный экшен для загрузки кода из репозитория, | ||
+ | |||
+ | <code yaml> | ||
+ | name: print workflow | ||
+ | on: workflow_dispatch | ||
+ | |||
+ | jobs: | ||
+ | checkout: | ||
+ | runs-on: ubuntu-latest | ||
+ | steps: | ||
+ | - name: checkout_repo | ||
+ | uses: actions/ | ||
+ | </code> | ||
</ | </ | ||
+ | ==== Примеры ==== | ||
- | ==== Actions ==== | + | < |
+ | < | ||
+ | Главный экшен " | ||
+ | Выполняются на self-hosted раннерах\\ | ||
+ | Настроено несколько окружений, | ||
- | < | + | " |
- | < | + | Триггеримся на пуш тега с формате " |
- | </ | + | Нюанс в том что сработает пуш этого тега в любую ветку а выпуск релиза предполагается наверно из мастера\\ |
+ | <code bash> | ||
+ | name: ci-production | ||
+ | on: | ||
+ | push: | ||
+ | tags: | ||
+ | - ' | ||
+ | jobs: | ||
+ | build: | ||
+ | uses: ./ | ||
+ | secrets: inherit | ||
- | ==== ==== | + | deploy-stage: |
+ | needs: build | ||
+ | uses: ./ | ||
+ | with: | ||
+ | environment: | ||
+ | secrets: inherit | ||
- | < | + | deploy-prod: |
- | < | + | needs: deploy-stage |
+ | uses: ./ | ||
+ | with: | ||
+ | environment: | ||
+ | secrets: inherit | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | Для запуска тестов делаем flow с триггером на пуш в любую ветку кроме " | ||
<code bash> | <code bash> | ||
+ | name: ci-test | ||
+ | on: | ||
+ | push: | ||
+ | branches: | ||
+ | - ' | ||
+ | - ' | ||
+ | |||
+ | jobs: | ||
+ | build: | ||
+ | uses: ./ | ||
+ | secrets: inherit | ||
+ | |||
+ | deploy-stage: | ||
+ | needs: build | ||
+ | uses: ./ | ||
+ | with: | ||
+ | environment: | ||
+ | secrets: inherit | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | <code bash> | ||
+ | name: build | ||
+ | on: | ||
+ | workflow_call: | ||
+ | |||
+ | jobs: | ||
+ | build: | ||
+ | runs-on: | ||
+ | - self-hosted | ||
+ | - Linux | ||
+ | - kube-common | ||
+ | |||
+ | steps: | ||
+ | - uses: actions/ | ||
+ | |||
+ | - name: Set up JDK 17 | ||
+ | uses: actions/ | ||
+ | with: | ||
+ | java-version: | ||
+ | distribution: | ||
+ | |||
+ | - name: Validate Gradle Wrapper | ||
+ | uses: gradle/ | ||
+ | |||
+ | - name: Compile | ||
+ | run: sudo bash ./gradlew : | ||
+ | |||
+ | - name: Test | ||
+ | run: sudo bash ./gradlew :test | ||
+ | |||
+ | - name: Build | ||
+ | run: sudo bash ./gradlew :bootJar | ||
+ | |||
+ | - name: Inject GitHub variables | ||
+ | uses: rlespinasse/ | ||
+ | |||
+ | - name: Set docker tags | ||
+ | run: | | ||
+ | echo ' | ||
+ | # В этой переменной последний тег, если нет собственного то в нем будет название ветки | ||
+ | if [[ " | ||
+ | echo " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi >> $GITHUB_ENV | ||
+ | echo ' | ||
+ | cat $GITHUB_ENV | ||
+ | |||
+ | - name: Login to Registry | ||
+ | uses: docker/ | ||
+ | with: | ||
+ | registry: registry.myapp.ru | ||
+ | username: ${{ secrets.DOCKER_USERNAME }} | ||
+ | password: ${{ secrets.DOCKER_PASSWORD }} | ||
+ | |||
+ | - name: Setup Docker Buildx | ||
+ | uses: docker/ | ||
+ | |||
+ | - name: Build and push image | ||
+ | uses: docker/ | ||
+ | with: | ||
+ | context: . | ||
+ | file: ./ | ||
+ | push: true | ||
+ | tags: ${{ env.DOCKER_TAGS }} | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | " | ||
+ | Деплоится на удаленный сервер, | ||
+ | Для применения окружения переменных " | ||
+ | <code bash> | ||
+ | name: deploy | ||
+ | on: | ||
+ | workflow_call: | ||
+ | inputs: | ||
+ | environment: | ||
+ | required: true | ||
+ | type: string | ||
+ | |||
+ | jobs: | ||
+ | deploy: | ||
+ | runs-on: | ||
+ | - self-hosted | ||
+ | - Linux | ||
+ | - kube-common | ||
+ | |||
+ | environment: | ||
+ | name: ${{ inputs.environment }} | ||
+ | |||
+ | steps: | ||
+ | - uses: actions/ | ||
+ | |||
+ | # Для того чтобы задеплоить именно эту версию образа, | ||
+ | # Указываем в докер-компоуз тег образа который мы добавляли на прошлом шаге | ||
+ | - name: Inject GitHub variables | ||
+ | uses: rlespinasse/ | ||
+ | |||
+ | - name: Get docker-image tags | ||
+ | run: | | ||
+ | echo ' | ||
+ | if [[ " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi >> $GITHUB_ENV | ||
+ | echo ' | ||
+ | cat $GITHUB_ENV | ||
+ | |||
+ | # Далее добавить еще один replace в компоуз | ||
+ | - name: Set secrets & environment | ||
+ | run: | | ||
+ | cd ./docker/ | ||
+ | sed -i ' | ||
+ | sed -i ' | ||
+ | |||
+ | - name: Deploy on remote host | ||
+ | uses: cross-the-world/ | ||
+ | with: | ||
+ | host: ${{ secrets.SSH_HOST }} | ||
+ | user: ${{ secrets.SSH_USER }} | ||
+ | pass: ${{ secrets.SSH_PASS }} | ||
+ | first_ssh: | | ||
+ | echo '===== PREPARE HOST =====' | ||
+ | sudo mkdir -p /opt/${{ vars.APP_DIRECTORY }}/ | ||
+ | sudo mkdir -p / | ||
+ | sudo chown -R ${{ secrets.SSH_USER }}. /opt/ | ||
+ | |||
+ | scp: | | ||
+ | echo '===== SENDING FILES =====' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | last_ssh: | | ||
+ | echo '===== LOGIN TO REGISTRY =====' | ||
+ | sudo docker login registry.myapp.io -u '${{ secrets.DOCKER_USERNAME }}' -p '${{ secrets.DOCKER_PASSWORD }}' | ||
+ | |||
+ | echo '===== RESTART DOCKER-COMPOSE =====' | ||
+ | cd /opt/${{ vars.APP_DIRECTORY }}/ | ||
+ | sudo docker-compose -f docker_compose_myapp.yml down | ||
+ | sudo docker-compose -f docker_compose_myapp.yml up -d | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== ==== | ||
+ | |||
+ | |||
+ | |||