Pretius: strategiczna fuzja jako odpowiedź na współczesne wyzwania
Pretius. Budujemy mądrzej:
strategiczna fuzja jako odpowiedź na współczesne wyzwania

Project Oracle SQLcl: Jedyne narzędzie CI/CD dla APEX, jakiego potrzebujesz?

Rafał Grzegorczyk

Oracle APEX & PL/SQL Developer

  • 12 grudnia, 2024

Spis

[Uwaga] Ten artykuł został pierwotnie przygotowany w języku angielskim i został przetłumaczony na język polski.

Mówiąc w skrócie, komenda project, wraz ze swoimi subkomendami, pomoże Ci z łatwością zarządzać zmianami w bazie danych. W tym samouczku krok po kroku opiszę, jak używać tego pomocnego narzędzia CI/CD w nowych lub istniejących projektach.

Wymagania wstępne

  • Posiadam dwa środowiska (DEV i PROD) w moim Oracle OCI i będę używać nazw połączeń HR_DEV_OCI oraz HR_PROD_OCI, aby się z nimi połączyć (przeczytaj o aliasach połączeń tutaj)
  • Bazy danych DEV i PROD mają tę samą liczbę obiektów utworzonych ręcznie podczas wcześniejszych wdrożeń (użyłem SQL Developer i przykładowego schematu HR od Oracle)
  • Mam aplikacje APEX o id 111 i id 222 zainstalowane na DEV i PROD
  • Wszystkie komendy, które zobaczysz na tym blogu, zostaną wykonane przy użyciu SQLcl 24.3.2 (przeczytaj, jak go zainstalować tutaj)

Zacznij korzystać z projektu SQLcl z istniejącymi lub nowymi bazami danych

1. Utwórz projekt bazy danych SQLcl

Mam pusty folder SQLCL_PROJECT_DB_APEX w moim VS Code.

A screen showing the settings.

Teraz łączę się z moim schematem HR na DEV.

sql -name HR_DEV_OCI

Nazywam mój projekt „PRETIUS” i chcę go zainicjalizować ze schematem „HR”.

project init -name PRETIUS -schemas HR

Widoczne poniżej foldery i pliki zostały automatycznie utworzone przez SQLcl.

A screen showing the settings.

2. Zainicjalizuj repozytorium GIT

Teraz muszę zainicjalizować nowe repozytorium GIT dla utworzonych plików i wykonać commit.

!git init --initial-branch=main
!git add .
!git commit -m "initializing repository with default project PRETIUS files"

A screen showing the settings.

3. Utwórz branch base-release, wyeksportuj obiekty DB z DEV i wykonaj commit

Teraz tworzę branch „base-release”, łączę się z HR_DEV i eksportuję obiekty bazy danych oraz aplikacje APEX do plików. Kroki są takie same dla nowych projektów. Eksportujesz pliki, gdy tylko w bazie danych zostaną utworzone jakieś obiekty.

--this command creates new branch and switches to it
!git checkout -b base-release

A screen showing the settings.

Teraz eksportuję wszystkie obiekty bazy danych i aplikacje APEX z DEV.

--connected to HR_DEV_OCI, execute this
project export

A screen showing the settings.

Moje obiekty bazy danych i aplikacje APEX zostały wyeksportowane.

A screen showing the settings.

Teraz wykonuję commit mojego base-release do GIT.

!git add .
!git commit -m "Base release"

A screen showing the settings.

4. Użyj project stage, aby stage’ować zmiany

W następnym kroku używam komendy project stage, aby stage’ować moje zmiany – komenda porównuje branch main z base-release.

--DOCKER_HR_DEV
project stage

A screen showing the settings.

Pliki niezbędne do wdrożenia zostały automatycznie utworzone w lokalizacji /dist/releases/next.

A screen showing the settings.

5. Zweryfikuj projekt

Teraz używam komendy project verify, aby sprawdzić projekt pod kątem ewentualnych błędów i ostrzeżeń.

project verify -verbose

Wszystko jest gotowe.

5. Uruchom project release, aby zakończyć wydanie 1.1

Nazywam moje bazowe wydanie „wersją 1.0”.

--HR_DEV_OCI
project release -version 1.0 -verbose

Terminal SQLcl jasno informuje, co się stało:

A screen showing the settings.

Moje wydanie przenosi się do /releases/1.0, a moje następne wydanie (next) jest puste.

A screen showing the settings.

7. Wygeneruj artefakt reprezentujący bieżący etap projektu

Używając komendy gen-artifact generuję artefakt reprezentujący aktualny status mojego projektu.

--HR_DEV_OCI
project gen-artifact -version 1.0-base-release

Nowy plik ZIP PRETIUS-1.0-base-release.zip zostaje wygenerowany (zauważ, że artefakty nie są wersjonowane w GIT).

A screen showing the settings.

Skrypt wdrożeniowy jest gotowy, więc mogę go commitować.

!git add .
!git commit -m "Version 1.0"

8. Wdróż wydanie (wersja 1.0) na PROD

Dla nowego projektu

  • Gdyby to był nowy projekt, wdrożyłbym cały mój kod na PROD używając komendy project deploy.
  • Wyglądałoby to tak (po połączeniu z PROD lub dowolnym innym środowiskiem)
--HR_PROD_OCI
project deploy -file artifact/PRETIUS-1.0-base-release.zip -verbose

Dla istniejących projektów

  • W moim przypadku (mam już obiekty na PROD), muszę ręcznie oznaczyć wersję 1.0 jako wydaną na PROD, uruchamiając komendę liquibase changelog-sync
  • Ta komenda nie zmieni żadnych obiektów w bazie danych – utworzy jedynie niezbędne tabele Liquibase i dokona odpowiednich wpisów w tabeli databasechangelog
--HR_PROD_OCI
liquibase changelog-sync -chf dist/releases/main.changelog.xml

A screen showing the settings.

A screen showing the settings.

A screen showing the settings.

9. GIT merge brancha „base-release” (DEV) do „main” (PROD)

W tym momencie moje środowisko DEV (base-release) jest równe PROD (main). Dlatego muszę zmergować branch base-release do brancha main.

Utwórz nowe zmiany na DEV i wdróż na PROD jako wersja 1.1

1. Dokonaj zmian bezpośrednio w środowisku DEV

Najpierw muszę zmienić pewne rzeczy bezpośrednio w środowisku DEV (używając VS Code, SQL Dev itp.). Dokonuję zmian w aplikacjach APEX na DEV.

A screen showing the settings.

INSERT INTO HR.COUNTRIES (COUNTRY_ID, COUNTRY_NAME, REGION_ID) VALUES ('PL', 'Poland', '10');

CREATE TABLE HR.PARAMETERS (NAME VARCHAR2(50),
                           VALUE VARCHAR2(50));

ALTER TABLE HR.EMPLOYEES 
ADD (ADDRESS VARCHAR2(100) );

 CREATE OR REPLACE PROCEDURE HR.SECURE_DML
 IS
 BEGIN
    IF TO_CHAR(SYSDATE, 'HH24:MI') not between '08:00' and '18:00'
       or TO_CHAR(SYSDATE, 'DY') in ('SAT', 'SUN')
    THEN
       RAISE_APPLICATION_ERROR(-20205,
                               'You may only make changes during normal office hours (this bracket is a change)');
    END IF;
END SECURE_DML;
/

INSERT INTO HR.PARAMETERS (name, value) VALUES ('MY_BLOG_URL','rafal.hashnode.dev');
COMMIT;

2. Utwórz nowy branch GIT

Teraz tworzę nowy branch GIT o nazwie „1.1”.

3. Wyeksportuj zmiany dokonane w obiektach bazy danych i aplikacji APEX

Aby wyeksportować zmiany, używam komendy project export:

--on branch 1.1
--connected to HR_DEV_OCI
project export

Ta komenda eksportuje aktualny stan obiektów bazy danych DEV oraz aplikacji APEX.

A screen showing the settings.

Po wyeksportowaniu czas na commit zmian na branchu 1.1.

A screen showing the settings.

!git add .
!git commit -m "Files for version 1.1"

4. Utwórz skrypt wdrożeniowy

Najpierw używam komendy project stage:

--HR_DEV_OCI
project stage

A screen showing the settings.

Ta komenda tworzy nowe pliki dla mojego wydania 1.1.

A screen showing the settings.

5. Użyj project stage add-custom do wdrażania niestandardowych skryptów

Jak zapewne pamiętasz, na moim środowisku DEV, oprócz zmian w tabelach EMPLOYEES i PARAMETERS oraz procedurze SECURE_DML, wykonałem również dwa inserty do tabel COUNTRIES i PARAMETERS. Jest to coś, czego SQLcl nie będzie śledzić automatycznie, i w tym celu musimy użyć komendy add-custom.

Dlatego utworzyłem dwa pliki dla DML w obu tabelach:

A screen showing the settings.

--HR_DEV_OCI
project stage add-custom -file-name dml_parameters
project stage add-custom -file-name dml_countries

A SQLcl automatycznie utworzył te pliki:

A screen showing the settings.

Nie ma potrzeby niczego zmieniać w tych plikach. Umieszczam tam jedynie moje skrypty insert:

A screen showing the settings.

6. Zweryfikuj projekt

Raz jeszcze używam komendy project verify, aby sprawdzić, czy wszystko jest w porządku.

--HR_DEV_OCI
project verify

A screen showing the settings.

Wszystko gotowe.

7. Uruchom project release, aby zakończyć wydanie 1.1

Używam następującej komendy:

--HR_DEV_OCI
project release -version 1.1 -verbose

Terminal SQLcl jasno informuje, co się stało:

A screen showing the settings.

Moje wydanie przenosi się do /releases/1.1, a moje następne wydanie (next) jest puste.

A screen showing the settings.

8. GIT commit wersji 1.1 i merge do brancha main

Lubię to robić, aby wszystko było przejrzyste. Ponieważ moje wydanie jest gotowe na PROD, powinienem je wdrożyć z brancha main (PROD). Dlatego wykonuję następujące czynności:

  • Git commit wersji 1.1 na branchu wersji 1.1
  • Merge brancha 1.1 do MAIN

9. Wygeneruj artefakt reprezentujący bieżący etap (wersja 1.1) projektu

Teraz tworzę artefakt dla mojej wersji 1.1, używając komendy gen-artifact:

--HR_PROD_OCI
--on GIT branch MAIN(prod)
project gen-artifact -version 1.1

A screen showing the settings.

10. Wdróż wydanie (wersja 1.1) na PROD

Jestem gotowy do wdrożenia moich zmian na PROD za pomocą komendy project deploy:

--HR_PROD_OCI
project deploy -file artifact/PRETIUS-1.1.zip -verbose

Terminal SQLcl wyraźnie informuje, co się stało, ale co najważniejsze, wszystkie moje zmiany, w tym APEX, zostały wdrożone na PROD:

A screen showing the settings.

A screen showing the settings.

Podsumowanie

I to by było na tyle. Mam nadzieję, że spodobał Ci się ten artykuł. Radzę poeksperymentować z komendą project i sprawdzić, czy pasuje ona do Twoich konkretnych potrzeb CI/CD. Osobiście jestem pod sporym wrażeniem jej możliwości i możliwe, że będzie to jedyne narzędzie CI/CD, którego będę używać w wielu projektach APEX.

Jeśli masz jakieś pytania, skontaktuj się ze mną pod adresem rgrzegorczyk@pretius.com. I oczywiście sprawdź inne moje artykuły na tym blogu:

  1. Oracle APEX: Dynamic highlights for required fields
  2. APEX 24.1 Working Copies – An in-depth look at one of the platform’s coolest features
  3. Liquibase tutorial 2024: What is this tool and how to start using it effectively?

Szukasz firmy tworzącej oprogramowanie?

Pracuj z zespołem, który pomógł już dziesiątkom rynkowych liderów. Umów spotkanie, by dowiedzieć się:

  • Jak działają nasze produkty
  • Jak możesz oszczędzić czas i pieniądze
  • Czym nasze rozwiązania różnią się od konkurencji

Przebieg kontaktu z Pretius

Dbamy o bezpieczeństwo Twoich danych: Certyfikat ISO

Działamy zgodnie z normą ISO 27001, zapewniając najwyższy poziom bezpieczeństwa Twoich danych.
certified dekra 27001
© 2026 Pretius. All right reserved.