Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
- Π Π°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ GitLab Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Vagrantfile ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΏΡΡΡΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π² Π½ΡΠΌ.
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ gitlab-runner Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Docker. Π Π°Π½Π½Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° ΡΠΎΠΉ ΠΆΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΏΡΡΠ΅Π½ GitLab.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ²Π΅ΡΠ° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½Π° Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΡΠ°Π½Π½Π΅ΡΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee -a /etc/apt/sources.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt update
sudo apt install virtualbox
vboxmanage --version
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant
vagrant --version
ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Vagranfile
echo '192.168.56.10 gitlab.localdomain gitlab' >> /etc/hosts
VAGRANT_EXPERIMENTAL="disks" vagrant up
docker run -ti --rm --name gitlab-runner \
--network host \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest register
ΠΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ gitlab runner
vim /srv/gitlab-runner/config/config.toml
concurrent = 1
check_interval = 0
connection_max_age = "15m0s"
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "ubuntu-client.dit.local"
url = "http://gitlab.localdomain:8090/"
id = 3
token = "4A4Cu_xkySsy2wWxK_aC"
token_obtained_at = 2024-03-15T14:53:33Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "go.1.17"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
extra_hosts = ["gitlab.localdomain:10.159.86.32"]
shm_size = 0
network_mtu = 0
docker run -d --name gitlab-runner --restart always \
--network host \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
docker ps -a
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
- ΠΠ°ΠΏΡΡΡΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° GitLab, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² origin. ΠΡΠΎ ΠΈΠ·ΡΡΠ°Π»ΠΎΡΡ Π½Π° Π·Π°Π½ΡΡΠΈΠΈ ΠΏΠΎ Git.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ .gitlab-ci.yml, ΠΎΠΏΠΈΡΠ°Π² Π² Π½ΡΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅, Π½Π° Π²Π°Ρ Π²Π·Π³Π»ΡΠ΄, ΡΡΠ°ΠΏΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ²Π΅ΡΠ° Π² ΡΠ°Π±Π»ΠΎΠ½ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅:
- ΡΠ°ΠΉΠ» gitlab-ci.yml Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅;
- ΡΠΊΡΠΈΠ½ΡΠΎΡΡ Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ.
git remote add my_origin_2 http://gitlab.localdomain:8090/my_group/my_project_2.git
git remote set-url my_origin_2 http://lamos:glpat-CLj1agRTX8Lv5vSXaJgb@gitlab.localdomain:8090/my_group/my_project_2.git
cd /git/sdvps-materials/
git push my_origin_2
vim /git/sdvps-materials/.gitlab-ci.yml
stages:
- test
- build
test:
stage: test
image: golang:1.17
script:
- go test .
build:
stage: build
image: docker:latest
script:
- docker build .
ΠΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡΡΠ° ΠΏΠΎ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΌΡ Π·Π°Π΄Π°Π½ΠΈΡ. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ ΡΠ΅ΡΠΈΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π»ΡΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅.
ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ CI ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ:
- ΡΡΠ°ΠΏ ΡΠ±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π»ΡΡ ΡΡΠ°Π·Ρ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅ΡΡΠΎΠ²;
- ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ *.go.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ²Π΅ΡΠ° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΠ°Π±Π»ΠΎΠ½ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ» gitlab-ci.yml ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅.
vim /git/sdvps-materials/.gitlab-ci.yml
stages:
- build
- test
build:
stage: build
image: docker:latest
script:
- docker build .
test:
stage: test
image: golang:1.17
script:
- |
if [[ $CI_COMMIT_REF_NAME == "main" ]] && [[ $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web" ]]; then
if [[ ! -z $(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHA -- '*.go') ]]; then
go test .
else
echo "No Go files were changed. Skipping tests."
fi
else
echo "Skipping tests as it's not a main branch push or web pipeline event."
fi












