278 Sept. 11, 2022, 6:48 p.m.

Шпаргалка по github action

Задача: реализовать простой цикл CI/CD

Предположим, что в репозитории есть Dockerfile с всеми зависимостями и по наступлению события (планировщик или обновление), производить переcборку контейнера, отправку его в hub.docker.com и его дальнейшее развертывание на сервере через ssh.

Пример файла workflow
name: CI\CD_webmail
on:
  schedule:
    - cron: '16 6 * * *'
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
jobs:
  build_and_pub:
    runs-on: [ubuntu-latest]
    env:
      LOGIN: ${{ secrets.DOCKER_LOGIN }}
      NAME: ${{ secrets.DOCKER_NAME }}
    steps:
      - name: Login to docker
        run: echo ${{ secrets.DOCKER_TOKEN }} | docker login -u ${{ secrets.DOCKER_LOGIN }} --password-stdin
      - uses: actions/checkout@master
      - name: Build image
        run: docker build -t $LOGIN/$NAME:${GITHUB_REF:11} -f Dockerfile .
      - name: Push image to docker
        run: docker push $LOGIN/$NAME:${GITHUB_REF:11}
  deploy:
    environment: stage
    runs-on: ubuntu-latest
    needs: build_and_pub

    steps:
      - name: Deploy to own srv via SSH action
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.SSH_HOST }}
          username: root
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          envs: IMAGE_NAME,REGISTRY,GITHUB_SHA,CONTAINER_NAME
          script:
            #Если это кибернетис kubectl rollout restart deploy hello
            #Если докер docker pull hello:latest docker-compose restart 

Настройка сервера

cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "[email protected]"

Парольную фразу на ключ ставить НЕ нужно.

cat id_rsa.pub >> ~/.ssh/authorized_keys

Далее можно настроить политику сервера ssh

Источники