{"id":13625541,"url":"https://github.com/flytux/gitlab-cicd","last_synced_at":"2025-04-16T06:32:52.465Z","repository":{"id":62135901,"uuid":"555114479","full_name":"flytux/gitlab-cicd","owner":"flytux","description":"Gitlab Runner CI on Kubernetes + CD  with ArgoCD baseline","archived":false,"fork":false,"pushed_at":"2024-06-30T06:38:02.000Z","size":15936,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-08-01T22:05:27.248Z","etag":null,"topics":["argocd","gitlab-runner","helm","k8s","kubernetes"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flytux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-10-21T01:13:39.000Z","updated_at":"2024-08-01T22:05:27.249Z","dependencies_parsed_at":"2024-01-14T08:45:47.058Z","dependency_job_id":"acfbd3de-c0a6-4b13-9b3a-084c0360dbff","html_url":"https://github.com/flytux/gitlab-cicd","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flytux%2Fgitlab-cicd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flytux%2Fgitlab-cicd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flytux%2Fgitlab-cicd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flytux%2Fgitlab-cicd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flytux","download_url":"https://codeload.github.com/flytux/gitlab-cicd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223700574,"owners_count":17188348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argocd","gitlab-runner","helm","k8s","kubernetes"],"created_at":"2024-08-01T21:01:57.456Z","updated_at":"2024-11-08T14:31:46.233Z","avatar_url":"https://github.com/flytux.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# GitLab-CI/CD Pipeline for Maven / ArgoCD\n\n- 4 Core, 16Gi, 100GB VM 3기를 준비합니다.\n- 2기는 DevOps 클러스터, 1기는 서비스 클러스터로 2개의 클러스터를 구성합니다.\n- DevOps 클러스터에 Rancher, Gitlab, Gitlab Runner, ArgoCD 등 툴체인을 구성합니다.\n- 빌드된 서비스는 서비스 클러스터로 배포됩니다.\n\n### 1. Install rke2 devops cluster\n\n- VM1에 rke2 마스터노드를 설치하고, 클러스터 추가용 token을 확인합니다.\n- VM2에 rke2 워커노드를 설치하고 마스터노드에 연결합니다.\n\n```bash\n# Create RKE2 cluster Master Node @ VM1\n\n# Login VM1\n\n$ sudo -i\n\n$ curl -sfL https://get.rke2.io | sh -\n\n$ systemctl enable rke2-server --now \u0026\n\n$ systemctl status -l rke2-server\n\n$ journalctl -fa\n\n# Check server IP \u0026 token\n\n$ ip a | grep inet\n\n# Check master node token to join the cluster\n$ cat /var/lib/rancher/rke2/server/token\nK107a5ebf3e93c0ce43b8c83be33eebd556470ba242dd471e393bf51415e63d4590::server:4e597066002aae1dc9770aa81a38104a\n\n# Create RKE2 cluster Worker Node @ VM2\n\n# Login VM2\n\n$ sudo -i\n\n$ curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE=\"agent\" sh -\n\n$ mkdir -p /etc/rancher/rke2/\n\n# Ediit master node IP and master node token to join\n$ cat \u003c\u003c EOF \u003e\u003e /etc/rancher/rke2/config.yaml\nserver: https://10.128.0.5:9345 # VM1 private IP \ntoken: K107a5ebf3e93c0ce43b8c83be33eebd556470ba242dd471e393bf51415e63d4590::server:4e597066002aae1dc9770aa81a38104a\nEOF\n\n$ systemctl enable rke2-agent.service --now \u0026\n\n$ journalctl -fa\n```\n---\n\n### 2. Setup cluster access\n\n- VM1에 클러스터 접속을 위한 kubeconfig 환경을 설정합니다.\n\n```bash\n\n# Login VM1\n\n$ mkdir ~/.kube\n$ sudo cp /etc/rancher/rke2/rke2.yaml ~/.kube/config\n$ sudo chown k8sadm ~/.kube/config \n\n# add k8s bash aliases\n$ cat \u003c\u003cEOF \u003e\u003e ~/.bashrc\n\n# k8s alias\n\nsource \u003c(kubectl completion bash)\ncomplete -o default -F __start_kubectl k\n\nalias k=kubectl\nalias vi=vim\nalias kn='kubectl config set-context --current --namespace'\nalias kc='kubectl config use-context'\nalias kcg='kubectl config get-contexts'\nalias di='docker images --format \"table {{.Repository}}:{{.Tag}}\\t{{.ID}}\\t{{.Size}}\\t{{.CreatedSince}}\"'\nalias kge=\"kubectl get events  --sort-by='.metadata.creationTimestamp'  -o 'go-template={{range .items}}{{.involvedObject.name}}{{\\\"\\t\\\"}}{{.involvedObject.kind}}{{\\\"\\t\\\"}}{{.message}}{{\\\"\\t\\\"}}{{.reason}}{{\\\"\\t\\\"}}{{.type}}{{\\\"\\t\\\"}}{{.firstTimestamp}}{{\\\"\\n\\\"}}{{end}}'\"\n\nZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=black,bold'\nEOF\n\n# Install kubectl / helm\n$ curl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\"\n$ chmod 755 kubectl \u0026\u0026 sudo mv kubectl /usr/local/bin\n$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash\n$ wget https://github.com/derailed/k9s/releases/download/v0.27.4/k9s_Linux_amd64.tar.gz\n$ tar xvf k9s_Linux_amd64.tar.gz \u0026\u0026 chmod +x k9s \u0026\u0026 sudo mv k9s /usr/local/bin\n\n$ source ~/.bashrc\n\n$ k get nodes -o wide\n\n# Ingress ssl passthrough 설정\n$ k edit ds -n kube-system rke2-ingress-nginx-controller\n\n# add \"--enable-ssl-passthrough\" at line 53\n  - --watch-ingress-without-class=true\n  - --enable-ssl-passthrough\n# save and qute (:wq)\n\n```\n\n### 2. Install rancher\n\n- Cert-Manager와 Rancher를 Helm을 이용하여 설치합니다.\n- 브라우저로 https:/rancher.kw01에 접속하여 암호를 설정합니다.\n\n```bash\n# Install cert-manager\n$ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml\n\n$ kn cert-manager\n$ k rollout status deploy\n\n# Install Rancher\n$ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest   \n$ helm install rancher rancher-latest/rancher \\\n  --set hostname=rancher.kw01 \\\n  --set bootstrapPassword=admin \\\n  --set replicas=1 \\\n  --set global.cattle.psp.enabled=false \\\n  --create-namespace -n cattle-system\n\n# https://rancher.kw01\n# bootstrap passwd : admin \u0026 change passwd\n```\n\n---\n\n### 3. Install gitlab\n\n```bash\n# Install local-path storage class \u0026 set default\n$ kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.22/deploy/local-path-storage.yaml\n$ kubectl patch storageclass local-path -p '{\"metadata\": {\"annotations\":{\"storageclass.kubernetes.io/is-default-class\":\"true\"}}}'\n\n# Install gitlab\n$ helm repo add gitlab https://charts.gitlab.io/\n  \n$ helm upgrade -i gitlab gitlab/gitlab \\\n--set global.edition=ce \\\n--set global.hosts.domain=kw01 \\\n--set global.ingress.configureCertmanager=false \\\n--set global.ingress.class=nginx \\\n--set certmanager.install=false \\\n--set nginx-ingress.enabled=false \\\n--set gitlab-runner.install=false \\\n--set prometheus.install=false \\\n-n gitlab --create-namespace\n\n# get root initial password\n$ k get -n gitlab secret gitlab-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 -d\n\n# login gitlab.kw01 as root / %YOUR_INITIAL_PASSWORD%\n# https://gitlab.kw01/admin/application_settings/general \u003e visibility \u0026 access controls \u003e import sources \u003e Repository By URL\n\n# create User with YOUR ID / PASSWD\n# argo / abcd!234 argo@devops\n\n# approve YOUR ID with root account admin menu\n# Login root and approve argo account\n\n# Import source / deploy repository from gitlab\n# Login argo and import projects\n- https://github.com/flytux/kw-mvn : Project Name \u003e KW-MVN\n- https://github.com/flytux/kw-mvn-deploy : Project Name \u003e KW-MVN-DEPLOY\n- main branch \u003e deploy.yml 파일의 이미지 URL을 VM1:30005로 변경합니다.\n- docker.vm01 \u003e 10.128.0.5:30005 로 변경 # VM1 IP:30005\n\n\n# Create CA certs for CA Issuer\n$ openssl genrsa -out ca.key 2048\n$ openssl req -new -x509 -days 3650 -key ca.key -subj \"/C=KR/ST=SE/L=SE/O=Kubeworks/CN=KW Root CA\" -out ca.crt\n$ kubectl create secret tls gitlab-ca --key ca.key --cert ca.crt -n gitlab\n\n# Create CA Issuer\n$ kubectl -n gitlab apply -f - \u003c\u003c\"EOF\"\napiVersion: cert-manager.io/v1\nkind: Issuer\nmetadata:\n  name: gitlab-ca-issuer\n  namespace: gitlab\nspec:\n  ca:\n    secretName: gitlab-ca\nEOF\n\n# Delete default ingress gitlab-webservice\n$ k delete ingress gitlab-webservice-default -n gitlab\n\n# Create Ingress \n$ kubectl -n gitlab apply -f - \u003c\u003c\"EOF\"\napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  annotations:\n    cert-manager.io/issuer: gitlab-ca-issuer\n  name: gitlab-web-ingress\n  namespace: gitlab\nspec:\n  ingressClassName: nginx\n  rules:\n  - host: gitlab.kw01\n    http:\n      paths:\n      - backend:\n          service:\n            name: gitlab-webservice-default\n            port:\n              number: 8181\n        path: /\n        pathType: Prefix\n  tls:\n  - hosts:\n    - gitlab.kw01\n    secretName: gitlab-web-tls\nEOF\n\n\n# Add selfsigned CA crt to gitlab runner via secret\n# add to /etc/hosts \ncat \u003c\u003c EOF | sudo tee -a /etc/hosts\n10.128.0.5 gitlab.kw01\nEOF\n\n$ openssl s_client -showcerts -connect gitlab.kw01:443 -servername gitlab.kw01 \u003c /dev/null 2\u003e/dev/null | openssl x509 -outform PEM \u003e gitlab.kw01.crt\n# Custom CA 인증서를 추가합니다.\n$ cat ca.crt \u003e\u003e gitlab.kw01.crt\n$ k create secret generic gitlab-runner-tls --from-file=gitlab.kw01.crt  -n gitlab\n\n# add in cluster dns gitlab.kw01 to coredns\n$ k edit cm -n kube-system rke2-coredns-rke2-coredns\n\ndata:\n  Corefile: |-\n    .:53 {\n        errors\n        health  {\n            lameduck 5s\n        }\n     hosts {\n     10.128.0.5 gitlab.kw01\n     fallthrough\n     }\n     ready\n        kubernetes   cluster.local  cluster.local in-addr.arpa ip6.arpa {\n            pods insecure\n            fallthrough in-addr.arpa ip6.arpa\n            ttl 30\n        }\n        prometheus   0.0.0.0:9153\n        forward   . /etc/resolv.conf\n        cache   30\n        loop\n        reload\n        loadbalance\n    }\n    \n$ k run -it --rm curl --image curlimages/curl -- sh\n/ $ ping gitlab.kw01\n\n```\n---\n\n### 4. Install gitlab-runner\n\n```bash\n# Setup runner and get runner token from KW-MVN project\n\n# https://gitlab.kw01/argo/kw-mvn/-/runners/new\n\n# Configuration \u003e Run untagged jobs 체크 \u003e Submit\n# Copy token glrt-wb_BLETYwEdVpP6qCyQX\n\n$ cat \u003c\u003c EOF \u003e gitlab-runner-values.yaml\ngitlabUrl: https://gitlab.kw01\n\nrunnerToken: glrt-wb_BLETYwEdVpP6qCyQX\nrbac:\n  create: true\n\ncertsSecretName: gitlab-runner-tls\n\nrunners:\n  config: |\n    [[runners]]\n      [runners.kubernetes]\n        namespace = \"{{.Release.Namespace}}\"\n        image = \"ubuntu:16.04\"\n    [[runners.kubernetes.volumes.pvc]]\n      mount_path = \"/cache/maven.repository\"\n      name = \"gitlab-runner-cache-pvc\"\nEOF\n\n# create gitlab runner cache pvc\n$ kubectl -n gitlab apply -f - \u003c\u003c\"EOF\"\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: gitlab-runner-cache-pvc\n  namespace: gitlab\nspec:\n  storageClassName: local-path\n  accessModes:\n  - ReadWriteOnce\n  resources:\n    requests:\n      storage: 1Gi\nEOF\n\n# Gitlab Runner 설치\n$ helm upgrade -i gitlab-runner -f gitlab-runner-values.yaml gitlab/gitlab-runner\n```  \n---\n\n### 5. Install argocd \u0026 docker registry\n\n```bash\n# install argocd\n$ kubectl create namespace argocd\n$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml\n\n# 앞에서 설정한 경우 Skip\n# add argocd ssl-passthrough args to ingress-controller\n$ k edit ds -n kube-system rke2-ingress-nginx-controller\n\n# add \"--enable-ssl-passthrough\" at line 53\n  - --watch-ingress-without-class=true\n  - --enable-ssl-passthrough\n# save and qute (:wq)\n\n# add ingress for argocd\n$ kubectl -n argocd apply -f - \u003c\u003c\"EOF\"  \napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: argocd-server-ingress\n  namespace: argocd\n  annotations:\n    kubernetes.io/ingress.class: nginx\n    nginx.ingress.kubernetes.io/force-ssl-redirect: \"true\"\n    nginx.ingress.kubernetes.io/ssl-passthrough: \"true\"\nspec:\n  rules:\n  - host: argocd.kw01\n    http:\n      paths:\n      - path: /\n        pathType: Prefix\n        backend:\n          service:\n            name: argocd-server\n            port:\n              name: https\nEOF\n\n# get argocd initial password\n$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d\n\n# add gitlab ca-cert (self-signed)\n- https://argocd.kw01/settings/certs?addTLSCert=true\n- add name gitlab.kw01 \u0026 paste gitlab.kw01.crt pem file\n\n$ cat gitlab.kw01.crt\n\n# add argocd app \n\n$ kn argocd\n$ k exec -it $(k get pods -l app.kubernetes.io/name=argocd-server -o name) bash\n\n# check argocd user id and password\n$ argocd login argocd-server.argocd --insecure --username admin --password e3m7VS-JpcpczVcq\n$ argocd repo add https://gitlab.kw01/argo/kw-mvn-deploy.git --username argo --insecure-skip-server-verification\n# enter gitlab password : abcd!234\n\n$ kubectl -n argocd apply -f - \u003c\u003c\"EOF\"\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: kw-mvn\nspec:\n  destination:\n    name: ''\n    namespace: deploy\n    server: 'https://kubernetes.default.svc'\n  source:\n    path: .\n    repoURL: 'https://gitlab.kw01/argo/kw-mvn-deploy.git'\n    targetRevision: main\n  sources: []\n  project: default\n  syncPolicy:\n    syncOptions:\n      - CreateNamespace=true\nEOF\n\n# Install docker registry\n$ helm repo add twuni https://helm.twun.io\n\n$ cat \u003c\u003c EOF \u003e\u003e values.yaml\nservice:\n  name: registry\n  type: NodePort\n  port: 5000\n  nodePort: 30005\npersistence:\n  accessMode: 'ReadWriteOnce'\n  enabled: true\n  size: 10Gi\n  storageClass: 'local-path'\nEOF\n\n$ helm install docker-registry -f values.yaml twuni/docker-registry -n registry --create-namespace\n\n$ export MY_NODE1_IP=10.128.0.5\n$ curl -v $MY_NODE1_IP:30005/v2/_catalog\n\n# nerdctl download\n$ wget https://github.com/containerd/nerdctl/releases/download/v1.3.1/nerdctl-full-1.3.1-linux-amd64.tar.gz\n$ sudo tar Cxzvvf /usr/local nerdctl-full-1.3.1-linux-amd64.tar.gz\n\n# nerdctl 설정\n$ sudo mkdir -p /etc/nerdctl\n$ cat \u003c\u003c EOF | sudo tee /etc/nerdctl/nerdctl.toml\ndebug          = false\ndebug_full     = false\naddress        = \"unix:///run/k3s/containerd/containerd.sock\"\nnamespace      = \"k8s.io\"\ncgroup_manager = \"cgroupfs\"\nhosts_dir      = [\"/etc/containerd/certs.d\", \"/etc/docker/certs.d\"]\nEOF\n\n# admin / 1 로 로그인\n$ sudo nerdctl --insecure-registry login $MY_NODE1_IP:30005 # 노드IP 값으로 변경\n\n# 컨테이너 런타임에 Private Registry 인증 / insecure 설정\n# 레지스트리 주소를 자신의 주소로 변경합니다.\n$ cat \u003c\u003c EOF | sudo tee /etc/rancher/rke2/registries.yaml\nmirrors:\n  $MY_NODE1_IP:30005:\n    endpoint:\n      - http://$MY_NODE1_IP:30005\nconfigs:\n  $MY_NODE1_IP:30005:\n    auth:\n      username: admin \n      password: 1 \n    tls:\n      insecure_skip_verify: true\nEOF\n\n$ sudo systemctl restart rke2-server\n\n# 워커노드도 동일하게 적용해 줍니다.\n# 워커노드 로그인 후\n\n$ export MY_NODE1_IP=10.128.0.5\n\n$ cat \u003c\u003c EOF | sudo tee /etc/rancher/rke2/registries.yaml\nmirrors:\n  $MY_NODE1_IP:30005:\n    endpoint:\n      - http://10.128.0.5:30005\nconfigs:\n  $MY_NODE1_IP:30005:\n    auth:\n      username: admin \n      password: 1 \n    tls:\n      insecure_skip_verify: true\nEOF\n\n$ sudo systemctl restart rke2-agent\n\n\n# 아래 파일에 insecure 및 인증 설정 추가 확인 \n$ sudo cat /var/lib/rancher/rke2/agent/etc/containerd/config.toml\n```\n---\n### 6. Develop build script\n\n- https://gitlab.kw01/argo/kw-mvn/-/ci/editor?branch_name=main\n\n```bash\n\nvariables:\n  MAVEN_OPTS: \"-Dmaven.repo.local=/cache/maven.repository\"\n  IMAGE_URL: \"10.128.0.5:30005/kw-mvn\"\n  DEPLOY_REPO_URL: \"https://gitlab.kw01/argo/kw-mvn-deploy.git\"\n  DEPLOY_REPO_CREDENTIALS: \"https://argo:abcd!234@gitlab.kw01/argo/kw-mvn-deploy.git\"\n  REGISTRY_USER_ID: \"admin\"\n  REGISTRY_USER_PASSWORD: \"1\"\n  ARGO_URL: \"argocd-server.argocd\"\n  ARGO_USER_ID: \"admin\"\n  ARGO_USER_PASSWORD: \"CWJjH2Fb278mmuDx\"\n  ARGO_APP_NAME: \"kw-mvn\"\n\n\nstages:\n  - maven-jib-build\n  - update-yaml\n  - sync-argo-app\n\nmaven-jib-build: \n  image: gcr.io/cloud-builders/mvn@sha256:57523fc43394d6d9d2414ee8d1c85ed7a13460cbb268c3cd16d28cfb3859e641\n  stage: maven-jib-build\n  script:\n    - COMMIT_TIME=\"$(date -d \"$CI_COMMIT_TIMESTAMP\" +\"%Y%m%d-%H%M%S\")\"\n    - \"mvn -B \\\n        -DsendCredentialsOverHttp=true \\\n        -Djib.allowInsecureRegistries=true \\\n        -Djib.to.image=$IMAGE_URL:$COMMIT_TIME-$CI_JOB_ID \\\n        -Djib.to.auth.username=$REGISTRY_USER_ID \\\n        -Djib.to.auth.password=$REGISTRY_USER_PASSWORD     \\\n        compile \\\n        com.google.cloud.tools:jib-maven-plugin:build\"\n    - echo \"IMAGE_FULL_NAME=$IMAGE_URL:$COMMIT_TIME-$CI_JOB_ID\" \u003e\u003e build.env\n    - echo \"NEW_TAG=$IMAGE_URL:$COMMIT_TIME-$CI_JOB_ID\" \u003e\u003e build.env\n    - cat build.env\n  artifacts:\n    reports:\n      dotenv: build.env\n\nupdate-yaml:\n  image: alpine/git:v2.26.2\n  stage: update-yaml\n  script:\n    - mkdir deploy \u0026\u0026 cd deploy\n    - git init\n\n    - echo $DEPLOY_REPO_CREDENTIALS \u003e ~/.git-credentials \n    - cat ~/.git-credentials\n    - git config credential.helper store\n    \n    - git remote add origin $DEPLOY_REPO_URL\n    - git remote -v\n\n    - git -c http.sslVerify=false fetch --depth 1 origin $CI_COMMIT_BRANCH\n    - git -c http.sslVerify=false checkout $CI_COMMIT_BRANCH\n    - ls -al\n\n    - echo \"updating image to $IMAGE_FULL_NAME\"\n    - sed -i \"s|$IMAGE_URL:.*$|$IMAGE_FULL_NAME|\" deploy.yml\n    - cat deploy.yml | grep image\n    \n    - git config --global user.email \"argo@dev\"\n    - git config --global user.name \"gitlab-runner\"\n    - git add .\n    - git commit --allow-empty -m \"[gitlab-runner] updating image to $IMAGE_FULL_NAME\"\n    - git -c http.sslVerify=false push origin $CI_COMMIT_BRANCH\n\nsync-argocd:\n  image: quay.io/argoproj/argocd:v2.4.8\n  stage: sync-argo-app\n  script:\n    - argocd login $ARGO_URL --username $ARGO_USER_ID --password $ARGO_USER_PASSWORD --insecure\n\n    - argocd app sync $ARGO_APP_NAME --insecure\n    - argocd app wait $ARGO_APP_NAME --sync --health --operation --insecure\n```\n---\n### 7. Run build pipeline\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflytux%2Fgitlab-cicd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflytux%2Fgitlab-cicd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflytux%2Fgitlab-cicd/lists"}