Skip to content

Commit ecf1331

Browse files
committed
[FINISH] finished
1 parent 0119174 commit ecf1331

File tree

1 file changed

+35
-83
lines changed

1 file changed

+35
-83
lines changed

pages/guides/ci-cd/jenkins-docker-ci-cd.en-UZ.mdx

Lines changed: 35 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -792,12 +792,12 @@ Bu qismda esa `Secret`ga Serverimiz IP manzilini yozishimiz kerak.
792792
### Dockerhub
793793

794794
<Callout type="info" emoji="">
795-
**ESLATMA->** Ushbu **CD** qism asosan Dockerhub va boshqa container registilarda ishash uchun moslashtirilgan! [GCR uchun quyidagi qismga o'ting](#gcr)
795+
**ESLATMA->** Ushbu **CD** qism asosan Dockerhub va boshqa container registrylarda ishash uchun moslashtirilgan! [GCR uchun quyidagi qismga o'ting](#gcr)
796796
</Callout>
797797

798-
Endi Serverimizga kerakli `environment`larni qo'shib chiqishimiz kerak.
798+
**1->** Endi Serverimizga kerakli `environment`larni qo'shib chiqishimiz kerak.
799799

800-
```groovy {4-6,8-9}
800+
```groovy {4-6,8-10}
801801
environment {
802802
DISCORD_WEBHOOK = credentials('discord-webhook')
803803
GIT_URL = 'https://github.com/ismoilovdevml/devops-journey.git'
@@ -807,30 +807,24 @@ environment {
807807
GIT_TOKEN = credentials('git-token')
808808
SERVER_USERNAME = credentials('server-username')
809809
SERVER_IP = credentials('server-ip')
810+
SSH_CREDENTIALS = credentials('server-ssh')
810811
BRANCH_NAME = 'main'
811812
}
812813
```
813-
814+
**2-> Deploy Server** bosqichi
814815
```groovy
815816
stage('Deploy Server') {
816817
steps {
817-
withCredentials([usernamePassword(
818-
credentialsId: 'dockerhub',
819-
usernameVariable: 'DOCKER_USERNAME',
820-
passwordVariable: 'DOCKER_PASSWORD'
821-
)]) {
818+
withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
822819
script {
823-
sshagent(credentials: ['server-ssh']) {
820+
sshagent (credentials: ['server-ssh']) {
824821
sh """
825-
ssh -o StrictHostKeyChecking=no ${SERVER_USERNAME}@${SERVER_IP} \
826-
'/home/username/deployer.sh \
827-
--image=${REGISTRY_URL}/${CONTAINER_NAME}:${BUILD_NUMBER} \
828-
--container-port=8080 \
829-
--system-port=8080 \
830-
--registry-host=${REGISTRY_URL} \
831-
--container-name=${CONTAINER_NAME} \
832-
--registry-token=${DOCKER_PASSWORD} \
833-
--registry-user=${DOCKER_USERNAME}'
822+
ssh -o StrictHostKeyChecking=no ${SERVER_USERNAME}@${SERVER_IP} '\
823+
docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} && \
824+
docker pull ${REGISTRY_URL}/${CONTAINER_NAME}:latest && \
825+
docker stop ${CONTAINER_NAME} || true && \
826+
docker rm ${CONTAINER_NAME} || true && \
827+
docker run -d -p 4001:4001 --name ${CONTAINER_NAME} --restart always ${REGISTRY_URL}/${CONTAINER_NAME}:latest '
834828
"""
835829
}
836830
}
@@ -839,66 +833,6 @@ stage('Deploy Server') {
839833
}
840834
```
841835

842-
Shu qismda bizda bitta muammo bor yani oldindan shu nomli container ishlab turgan bo'lsa conflict kelib chiqadi. Buni oldini olish uchun serverda `deployer.sh` nomli bash script yozamiz. U script vazifasi quyidagicha unga Jenkins pipelineda tashqi argumentlar beriladi shu nomli ishlab turgan container bo'lsa uni o'chirib tozalab yangi containerni berilgan portda ishga tushirib qo'yadi. Bash script quyidagicha:
843-
844-
845-
```bash
846-
nano deployer.sh
847-
```
848-
849-
```bash filename="deployer.sh" {36,44}
850-
!/bin/bash
851-
while [ $# -gt 0 ]; do
852-
case "$1" in
853-
--image=*)
854-
IMAGE="${1#*=}"
855-
;;
856-
--container-port=*)
857-
CONTAINER_PORT="${1#*=}"
858-
;;
859-
--system-port=*)
860-
SYSTEM_PORT="${1#*=}"
861-
;;
862-
--registry-token=*)
863-
REGISTRY_TOKEN="${1#*=}"
864-
;;
865-
--registry-host=*)
866-
REGISTRY_HOST="${1#*=}"
867-
;;
868-
--container-name=*)
869-
CONTAINER_NAME="${1#*=}"
870-
;;
871-
--registry-user=*)
872-
REGISTRY_USER="${1#*=}"
873-
;;
874-
*)
875-
printf "***************************\n"
876-
printf "* Error: Invalid argument.*\n"
877-
printf "***************************\n"
878-
exit 1
879-
esac
880-
shift
881-
done
882-
883-
884-
echo y | docker container prune
885-
echo $REGISTRY_TOKEN | docker login $REGISTRY_HOST -u $REGISTRY_USER --password-stdin
886-
docker pull $IMAGE
887-
echo "Clean temp Container"
888-
889-
if $(docker ps | awk -v CONTAINER_NAME="$CONTAINER_NAME" 'NR > 1 && $NF == CONTAINER_NAME{ret=1; exit} END{exit !ret}' ); then
890-
docker stop "$CONTAINER_NAME"
891-
docker rm -f "$CONTAINER_NAME"
892-
fi
893-
docker run -d -p $SYSTEM_PORT:$CONTAINER_PORT --restart=always --name $CONTAINER_NAME $IMAGE
894-
```
895-
Bash scriptni executable qilib qo'yamiz.
896-
897-
```bash
898-
sudo chmod +x deployer.sh
899-
```
900-
Pipelinedagi `/home/username/deployer.sh` qismini deployer.sh scriptingiz joylashgan yo'lni(path)ni ko'rsatib qo'yishingiz kerak. Ushbu bosqich ssh bilan serverga kirib `deployer.sh` bash scriptga tashqi argumentlar berib uni ishga tushiradi. Pipelineni yangilab uni ishga tushiramiz agar sizda hammasi to'gri qilingan bo'lsa u muvaffiqyatli ishlashi kerak.
901-
902836
### GCR
903837

904838
**1->** **GCR** uchun `environment` qismi.
@@ -948,9 +882,9 @@ stage('Deploy to Server') {
948882

949883
## Xulosa
950884

951-
Dockerhub bilan ishlaydigan to'liq CI/CD Jenkins pipeline
885+
**Dockerhub** bilan ishlaydigan to'liq CI/CD Jenkins pipeline
952886

953-
```groovy
887+
```groovy {11-13, 45-63}
954888
pipeline {
955889
agent any
956890
@@ -963,6 +897,7 @@ pipeline {
963897
GIT_TOKEN = credentials('git-token')
964898
SERVER_USERNAME = credentials('server-username')
965899
SERVER_IP = credentials('server-ip')
900+
SSH_CREDENTIALS = credentials('server-ssh')
966901
BRANCH_NAME = 'main'
967902
}
968903
stages {
@@ -999,7 +934,14 @@ pipeline {
999934
withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
1000935
script {
1001936
sshagent (credentials: ['server-ssh']) {
1002-
sh "ssh -o StrictHostKeyChecking=no ${SERVER_USERNAME}@${SERVER_IP} '/home/username/deployer.sh --image=${REGISTRY_URL}/${CONTAINER_NAME}:${BUILD_NUMBER} --container-port=3000 --system-port=3000 --registry-host=${REGISTRY_URL} --container-name=${CONTAINER_NAME} --registry-token=${DOCKER_PASSWORD} --registry-user=${DOCKER_USERNAME}'"
937+
sh """
938+
ssh -o StrictHostKeyChecking=no ${SERVER_USERNAME}@${SERVER_IP} '\
939+
docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD} && \
940+
docker pull ${REGISTRY_URL}/${CONTAINER_NAME}:latest && \
941+
docker stop ${CONTAINER_NAME} || true && \
942+
docker rm ${CONTAINER_NAME} || true && \
943+
docker run -d -p 4001:4001 --name ${CONTAINER_NAME} --restart always ${REGISTRY_URL}/${CONTAINER_NAME}:latest '
944+
"""
1003945
}
1004946
}
1005947
}
@@ -1122,4 +1064,14 @@ pipeline {
11221064
}
11231065
}
11241066
}
1125-
```
1067+
```
1068+
1069+
<Callout type="info" emoji="">
1070+
1071+
Ushbu loyiha GitHub repositoriyasi: [github.com/ismoilovdevml/devops-journey](https://github.com/ismoilovdevml/devops-journey.git)
1072+
1073+
**Sana:** 2024.01.18 (2024-yil 18-yanvar)
1074+
1075+
**Muallif: Otabek Ismoilov**
1076+
1077+
</Callout>

0 commit comments

Comments
 (0)