GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Membuat Pipeline CI/CD untuk Gambar CircleCI Docker

Jika Anda mencari cara untuk menguji dan men-deploy image CircleCI Docker Anda, membuat pipeline CI/CD dapat membawa Anda jauh untuk meningkatkan pengiriman perangkat lunak.

Dalam tutorial ini, Anda akan mempelajari bagaimana Anda berpotensi mengembangkan pipeline CI/CD untuk image Docker Anda menggunakan CircleCI.

Baca terus dan terapkan gambar Docker Anda, hanya jika gambar tersebut lulus uji!

Prasyarat

Tutorial ini akan menjadi demonstrasi langsung. Jika Anda ingin mengikuti, pastikan Anda memiliki yang berikut:

  • Sebuah GitHub akun dan penyimpanan GitHub yang sudah disiapkan.
  • Akun CircleCI yang ditautkan ke akun GitHub Anda.
  • Akun Docker Hub.
  • Docker terpasang.
  • Mesin Linux – Tutorial ini menggunakan Ubuntu 20.04.3 LTS.

Membuat Gambar Docker dari Aplikasi Berbasis Python

Sebelum melompat ke pembuatan pipeline CI/CD, Anda harus terlebih dahulu membuat image Docker berdasarkan aplikasi Python yang menampilkan teks di browser web. Anda akan membahas secara singkat cara aplikasi dibuat, menulis kasus uji untuk aplikasi, lalu memasukkan aplikasi ke dalam container.

1. Buka terminal Anda, dan jalankan perintah berikut untuk install Flask dan Pytest. Flask adalah kerangka kerja yang digunakan untuk membangun aplikasi web dengan Python sementara Pytest digunakan untuk menulis kode pengujian Python.

pip install flask pytest

2. Selanjutnya, buat direktori proyek dengan nama pilihan Anda, tetapi direktori proyek tersebut bernama flask-circleci dalam demo ini. Direktori ini adalah tempat Anda menyimpan sumber daya untuk tutorial ini.

mkdir flask-circleci

3. Buat file bernama flask-circleci/main.py dan isi kode berikut.

Kode di bawah ini menampilkan teks “Welcome to my Flask App” pada halaman beranda di browser.

from flask import Flask

app = Flask(__name__) #create an instance of the Flask class you just imported

@app.route('/')
def main():
    # display a string in the home page
    return "Welcome to my Flask App"

4. Sekarang, buat file lain bernama flask-circleci/test_main.py dan salin/tempel kode berikut.

Kode di bawah ini membuat klien uji untuk aplikasi Anda.

Pytest mengharuskan nama file pengujian Anda dimulai dengan test_ seperti yang ditunjukkan di bawah ini.

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the stutus code of the page('/') is 200
    assert response.status_code == 200 
		# assert the return statement to the page
    assert response.data == b'Welcome to my Flask App' 

5. Jalankan perintah berikut untuk menavigasi ke direktori proyek Anda (flask-circleci ), jalankan tes untuk proyek Anda.

cd flask-circleci
pytest

Jika tes berhasil, Anda akan mendapatkan kemajuan 100%, seperti yang ditunjukkan di bawah ini.

6. Selanjutnya, buat file teks (requirements.txt ) untuk mendokumentasikan dependensi Anda di direktori root dan mengisi teks di bawah ini. File ini penting saat membangun image Docker Anda agar berfungsi dengan baik.

Flask==2.0.3
pytest==6.2.5

7. Terakhir, buat file baru (flask-circleci/Dockerfile) , dan tulis instruksi di bawah ini ke Dockerfile untuk membangun citra Docker Anda.

Petunjuk di Dockerfile lakukan hal berikut:

  • Buat file di gambar Anda.
  • Menyalin semua file dalam file di direktori saat ini (flask-circleci ).
  • Jalankan kode Anda
# set the Base Image from which your image will be built on
FROM python:3.8 
# create a directory called flask-circleci in root. 
# This directory will contain the code which currently resides in
RUN mkdir /flask-circleci

# make /flask-circleci the working directory
WORKDIR /flask-circleci

# copy your requirements file to the directory you just created
COPY requirements.txt /flask-circleci 

RUN pip install -r requirements.txt

# copy the current directory in you local machine to /flask-circleci in your image
ADD . /flask-circleci

EXPOSE 5000

CMD python main.py

Membuat Pipeline CI/CD CircleCI

Sekarang Anda memiliki gambar Docker Anda siap, Anda akan membuat pipa CI/CD untuk menguji kode Anda, dan jika semua tes lulus gambar Docker dan didorong ke Docker Hub. Docker Hub adalah layanan seperti GitHub, tetapi untuk image Docker, yang membantu Anda menemukan dan berbagi image container dengan tim Anda atau developer lain.

Untuk membuat pipeline CI/CD, ikuti langkah-langkah di bawah ini:

1. Buka browser web favorit Anda dan masuk ke akun Docker Hub Anda.

2. Di beranda Docker Hub, klik Buat Repositori opsi untuk membuat repositori di Docker Hub.

3. Tetapkan nama unik untuk repositori Anda. Tutorial ini menggunakan repositori bernama circleci-tutorial , seperti yang ditunjukkan di bawah ini.

4. Buat file baru (flask-circleci/config.yml) di root proyek Anda, dan salin/tempel kode di bawah ini ke config.yml mengajukan.

Kode di bawah ini mendapatkan gambar Python yang sudah jadi dan menggunakannya untuk menginstal dependensi dan menjalankan pengujian unit untuk membangun dan mendorong gambar Docker Anda ke repositori Docker Hub Anda.

Biasanya, untuk proyek langsung, Anda ingin memasukkan nama pengguna dan kata sandi Anda dilindungi di dalam CircleCI atau mungkin di file .env.

version: 2  # Version of CircleCI
jobs:
  build:
    docker:
      - image: python:3.8
    steps:
      - checkout

      - run:
        # creates a virtual environment for you project, 
				# install dependencies in it and run tests
          name: Run unit tests
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -r requirements.txt
            pytest
			# Creates a remote Docker environment configured to execute Docker commands.
      - setup_remote_docker 
       
      - run:
        # installs a docker client that will be used to run the docker commands
          name: Install Docker client
          command: |
            set -x
            VER="17.03.0-ce"
            curl -L -o /tmp/docker-$VER.tgz https://get.docker.com/builds/Linux/x86_64/docker-$VER.tgz
            tar -xz -C /tmp -f /tmp/docker-$VER.tgz
            mv /tmp/docker/* /usr/bin
      - run:
         # Builds a docker image to push to Docker Hub
				 # Tag (-t) pattern is below, where CircleCI 
				 # to get the Dockerfile from the current directory.
         # <docker_hub_username/docker-hub-password:version>.
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v1 .

      - run:
        # Pushes the Docker image you created to the Docker Hub.
        # Replace khabdrick/circleci-tutorial:v1 with the 
				# <docker_hub_username/docker-hub-password:version> you used to build the image above
          name: Push to Docker Hub
          command: |
            docker login -u unsername -p password
            docker push khabdrick/circleci-tutorial:v1

5. Terakhir, jalankan perintah berikut di root proyek Anda untuk commit dan push kodenya (flask-circleci/config.yml ) ke repositori GitHub Anda.

git add . # adds changes to staging area
git commit -m "update" # commits your changes
git push # Push to GitHub

Mengaktifkan CircleCI CI/CD Pipeline

Anda baru saja membuat Pipeline CI/CD CircleCI Anda, tetapi saat ini, itu hanya duduk di sana dan tidak melakukan banyak hal. Anda harus mengaktifkan saluran Anda dengan menyiapkan proyek di akun CircleCI Anda.

1. Masuk ke akun CircleCI Anda dengan akun GitHub di browser web Anda.

2. Selanjutnya, klik Proyek tab di panel kiri, dan klik Siapkan Proyek tombol di sisi kanan proyek Anda untuk mengaktifkan pipa CircleCI pada proyek.

Karena Anda masuk ke CircleCI dengan akun GitHub Anda, proyek Anda disinkronkan dengan CircleCI, seperti pada gambar di bawah ini.

3. Navigasikan kembali ke Dasbor tab dan Anda akan melihat Sukses status. Sukses status menunjukkan semuanya berjalan seperti yang diharapkan, dan gambar telah didorong ke repositori Docker Hub Anda.

Klik build untuk melihat semua langkah yang berjalan di pipeline.

Di bawah, Anda dapat melihat daftar langkah-langkah yang diambil CircleCI untuk menjalankan pipeline.

4. Terakhir, beralih kembali ke repositori Docker Hub Anda, dan Anda akan melihat gambar yang Anda masukkan ke Docker Hub melalui pipeline CircleCI.

Mendorong Perubahan ke GitHub untuk Memicu Pipeline CircleCI

Sekarang, Anda sudah memiliki pipeline CircleCI yang berfungsi. Tapi mungkin Anda membuat perubahan pada proyek Anda. Jika demikian, bagaimana Anda tahu bahwa pipa masih berfungsi? Anda dapat memicu CircleCI dengan mendorong perubahan ke repositori GitHub Anda dan melihat apakah pengujian akan berhasil.

1. Di komputer lokal Anda, ganti kode yang Anda miliki di test_main.py dengan kode di bawah ini. Kode di bawah ini sengaja memastikan tes gagal karena kode status diubah dari 200 ke 400 .

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the status code of the page('/') is 400 when it isn't, 
		# causing the test to fail.
    assert response.status_code == 400 
		# assert the return statement ton the page
    assert response.data == b'Flask App' 

2. Selanjutnya, ganti steps di config.yml yang membangun image Docker dan mendorongnya ke Docker Hub dengan kode di bawah ini.

Pada kode di bawah ini, Anda hanya mengubah versi untuk memastikan hanya perubahan baru yang didorong ke repositori GitHub Anda.

      - run:
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v2 .

      - run:
          name: Push to DockerHub
          command: |
            docker login -u khabdrick -p Muhammed-1998
            docker push khabdrick/circleci-tutorial:v2

3. Jalankan perintah berikut di root proyek Anda ke commit dan push kode ke repositori GitHub Anda.

git add . # adds changes to staging area
git commit -m "v2" # commits your changes
git push # Push to GitHub

4. Sekarang, navigasikan ke dasbor CircleCI Anda, dan Anda akan melihat bahwa build Gagal , seperti yang ditunjukkan di bawah ini.

Klik build untuk melihat langkah-langkah yang diambil untuk mendorong perubahan dan mengonfirmasi penyebab kegagalan build.

5. Terakhir, navigasikan ke repositori Docker Hub Anda dan konfirmasikan bahwa perubahan tidak didorong.

Seperti yang Anda lihat pada gambar di bawah, v2 tidak diunggah karena pengujian gagal.

Kesimpulan

Sepanjang tutorial ini, Anda telah belajar cara menulis tes, dan Dockerisasi aplikasi Python Anda. Anda telah membuat pipeline CI/CD dengan CircleCI yang menjalankan pengujian untuk aplikasi Anda dan mendorong image Docker Anda ke Docker Hub.

Pada titik ini, Anda sudah memiliki pengetahuan dasar tentang pengembangan pipeline CI/CD dengan CircleCI. Sekarang, bagaimana Anda berniat menggunakan pengetahuan yang baru ditemukan ini? Mungkin membuat pipeline CI/CD yang menyebarkan image Docker Anda ke Heroku?


Docker
  1. Cara Membuat Direktori Bersama untuk Semua Pengguna di Linux

  2. Cara Memindahkan Gambar Docker antar Host

  3. Cara Memasang Direktori Host Ke Wadah Docker

  1. Cara Berbagi Gambar Docker Dengan Orang Lain

  2. Cara Memodifikasi Gambar Docker

  3. Bagaimana cara mengarahkan gambar buruh pelabuhan ke direktori .m2 saya untuk menjalankan maven di buruh pelabuhan di mac?

  1. Belajar Docker:Cara Membuat Wadah Docker

  2. Cara Membuat Wadah Docker MySQL untuk Pengujian

  3. Cara membuat tautan ke direktori