Hello các bạn!
Hôm nay chúng ta sẽ cùng nhau sử dụng github action để build và push image to dockerhub.
Mình thực hiện demo trên repo này: https://github.com/mrnim94/doctor-doom
1) Create Access Token on Docker hub
Sau đó bạn tạo 1 repository trên dockerhub
2) Using Github Action
Để github action có thể login vào docker hub, bạn cần tạo các secrets bằng cách bên dưới
Bạn tạo folder: .github/workflows
và trong folder có file: main.yml
name: ci on: push: branches: - "master" tags: - '*.*.*' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push uses: docker/build-push-action@v3 with: context: . file: ./Dockerfile push: true tags: ${{ secrets.DOCKER_HUB_USERNAME }}/doctor-doom:latest, ${{ secrets.DOCKER_HUB_USERNAME }}/doctor-doom:${{ env.RELEASE_VERSION }}
Ở đây thì mình mong muốn là nó sẽ build 1 image latest và image có tag là RELEASE_VERSION
https://stackoverflow.com/questions/58177786/get-the-current-pushed-tag-in-github-actions
3) Parallel Building/Pipeline in GitHub action
https://github.com/mrnim94/samba/blob/master/.github/workflows/main.yml
name: ci on: push: branches: - "master" tags: - '*.*.*' jobs: build-publish-containers: name: Build and Publish Containers runs-on: ${{ matrix.os }} strategy: max-parallel: 2 matrix: recycle: [yes, no] include: - os: ubuntu-latest recycle: yes style: "" file: Dockerfile - os: ubuntu-latest recycle: no file: Dockerfile.not_recycle style: "-not-recycle" steps: - name: Checkout uses: actions/checkout@v3 - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push uses: docker/build-push-action@v4 with: context: . file: ./${{ matrix.file }} push: true tags: ${{ secrets.DOCKER_HUB_USERNAME }}/samba:latest${{ matrix.style }}, ${{ secrets.DOCKER_HUB_USERNAME }}/samba:${{ env.RELEASE_VERSION }}${{ matrix.style }}
ở đây mình sự dụng matrix để làm được việc này.
các bạn có thể review github action của minh.
https://github.com/mrnim94/samba/actions/runs/4145270674