DevOps AI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud
No Result
View All Result
DevOpsAI
No Result
View All Result
Home DevOps & Cloud

Cách đồng bộ source giữa Gitlab và Codecommit

Quân Nguyễn by Quân Nguyễn
25 Tháng 4, 2025
in DevOps & Cloud
0
Share on FacebookShare on Twitter

Tại dự án của mình, source sẻ có hai bộ, một bộ sẻ được để ở Code commit phục vụ cho việc deploy, bộ còn lại ở Gitlab được đặt trong local network  phục vụ cho việc scan code bằng Sonar, Blackduck và Coverity.

Mỗi khi cần deploy thì mình cần phải đồng bộ source giữa Gitlab và Code commit.

Giải pháp

Mình sẽ dùng Jenkins để đồng bộ source, phía khách hàng muốn sử dụng tài khoảng riêng cho từng môi trường, thì mỗi tài khoảng sẽ có một repo Code commit tương tứng, và các cặp user/pass tương ứng.

Related Post

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

11 Tháng 6, 2025
cdk terraform

CDK cho Terraform

29 Tháng 4, 2025

Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!

29 Tháng 4, 2025

Đổi MTU cho Calico trong Kubernetes

30 Tháng 4, 2025

Phần pipelne sẽ bao gồm các bước như pull code từ Gitlab về, sau đó clear source như thư mục .git, pakage-lock.json … vv, sau đó sẻ commit và push lên Code commit bằng user/pass dành cho môi tường đó.

Luồng đồng bộ

Ở Gitlab sẽ có bốn nhánh là dev, testing, staging và master.

Hai nhánh dev và testing sẽ được đồng bộ tới repo Code commit với nhánh dev và master của tài khoảng dev.

Nhánh staging sẽ được động bộ tới nhánh master của repo Code commit tài khoảng stag.

Nhánh master sẽ được động bộ tới nhánh master của repo Code commit tài khoảng prod.

Cấu hình Credentials

 Mình sẽ tạo ba Credentials tương ứng với ba repo Code commit trong Jenkins.

Tạo Downtream Job

Mình sẽ tạo một Job riêng biệt để làm nhiệm vũ sync source lên Code commit.

Validate branch function

Dựa vào luồng đồng bộ ở trên hàm này có nhiệm vụ sẽ trả về git url tương ứng với giá trị nhánh đưa vào, ví dụ mình đưa vào nhánh dev, thì hàm sẽ trả về “git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/dev-backend -b dev”

				
					@NonCPS
def validateRemoteRepo(MICRO_REPO_BRANCH){
    map_branch_repo = [
        dev: "git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/dev-backend -b dev",
        testing: "git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/dev-backend -b master",
        staging: "git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/stg-backend -b master",
        master: "git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/prod-backend -b master"
    ]
    if(!map_branch_repo[MICRO_REPO_BRANCH]){
        throw new RuntimeException(MICRO_REPO_BRANCH + " Not Match!!");
    } else {
        return map_branch_repo[MICRO_REPO_BRANCH];
    }
}
				
			

Validate account function

Hàm này có tác dụng trả về credential tương ứng với nhánh đưa vào, ví dụ mình đưa vào nhánh dev thì hàm sẽ trả về account “codecommit.dev”

				
					@NonCPS
def validateAccount(BRANCH){
    map_account = [
        dev: "codecommit.dev",
        testing: "codecommit.dev",
        staging: "codecommit.stg",
        master: "codecommit.prod"
    ]
    if(!map_account_repo[MICRO_REPO_BRANCH]){
        throw new RuntimeException(MICRO_REPO_BRANCH + " Not Match!!");
    } else {
        return map_account_repo[MICRO_REPO_BRANCH];
    }  
}
				
			

Parameter

Mình khởi tạo param để truyền các giá trị như Gitlab url, Giltlab branch để các hàm xử lý.

				
					    parameters {
        string(name: 'GITLAB_REPO')
        string(name: 'GITLAB_BRANCH')
    }
				
			

Clone repo Code commit

Mình sẽ clone repo Code commit về, xóa source trong đó đi.

				
					        stage('Clone Codecommit'){
            steps{
                dir("${env.WORKSPACE}") {
                    script {
                        if(fileExists("backend"))
                        {
                            powershell "Remove-Item 'backend"
                        }
                        def codecommit_url = validateRemoteRepo("$")
                        def codecommit_acc = validateAccount("$")
                        withCredentials([usernamePassword(credentialsId: "$", usernameVariable: 'USER', passwordVariable:'PASS')]) {
                            env.encodedPass=URLEncoder.encode(PASS, "UTF-8")
                            powershell """
                              git config --global user.email 'ci@vm.com'
                              git config --global user.name 'jenkins-ci'
                              git clone https://$USER:$encodedPass@$  backend
                            """
                            powershell "Remove-Item 'backend/src"
                        }
                    }
                }
            }
        }
				
			

Clone source Gitlab, clear, commit and push

Tiếp theo mình clone source Giltab, sau đó tiền hành clear source và move source vào thư mục của repo Code commit, commit và push.

				
					        stage('Clone Gitlab'){
            steps{
                dir("${env.WORKSPACE}/backend") {
                    script {
                        withCredentials([usernamePassword(credentialsId: "$", usernameVariable: 'USER', passwordVariable:'PASS')]) {
                            env.encodedPass=URLEncoder.encode(PASS, "UTF-8")
                            powershell """
                              git config --global user.email 'ci@aap-k.com'
                              git config --global user.name 'jenkins-ci'
                              git clone https://$USER:$encodedPass@$ -b $ git_temp
                            """
                        }                          
                    }
                }
            }
        }
        stage('Clear and sync'){
            steps{
                dir("${env.WORKSPACE}/backend") {
                    script {
                        powershell "Remove-Item 'git_temp/src/package-lock.json'"
                        powershell "Move-Item -Path 'git_temp/src' -Destination 'src'"
                        powershell "Remove-Item 'git_temp'"
                    }
                }
            }
        }
        stage('Push'){
            steps{
                dir("${env.WORKSPACE}/backend") {
                    script {
                        bat """ git add .
                                git commit -m "new update"
                                git push origin """
                    }
                }
            }
        }
				
			

Trigger Job

Ở Job chín (Job thực hiện sacn code, ..) mình sẽ thêm phần trigger dowstream job

				
					    stage {
        steps {
            build job: "Sync_source",
            parameters [
            string(name: 'GITLAB_REPO', value: '$gitlab_url'),
            string(name: 'GITLAB_BRANCH', value: '$gitlab_branch')
            ]
        }
    }
				
			

Param gitlab_branch mình sẽ dùng một plugin để chọn nhánh thông qua menu xổ xuống.

Tags: awsbuildcicddeployelementgitGitLabjenkinskiến trúclabpackagePowerShellramrceterraformtestingtrigger
Quân Nguyễn

Quân Nguyễn

Related Posts

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất
DevOps & Cloud

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

by devopsify
11 Tháng 6, 2025
cdk terraform
DevOps & Cloud

CDK cho Terraform

by Quân Nguyễn
29 Tháng 4, 2025
Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!
Tin tức

Ưu Đãi Đặc Biệt: Nhận Ngay Coupon Giảm 25% cho Bộ Đề Luyện Thi Cloud!

by devopsify
29 Tháng 4, 2025
Next Post

Cài đặt Chocolatey trên Windows

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Recommended

Tổng hợp các phiên bản Stable Diffusion: So sánh, tính năng và yêu cầu phần cứng

Tổng hợp các phiên bản Stable Diffusion: So sánh, tính năng và yêu cầu phần cứng

13 Tháng 6, 2025
Cài đặt Maven trên Windows

Cài đặt Maven trên Windows

11 Tháng 6, 2025
Các website demo hay được sử dụng cho thực hành Automation Test

Các website demo hay được sử dụng cho thực hành Automation Test

11 Tháng 6, 2025
Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

16 Tháng 6, 2025
Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent

16 Tháng 6, 2025
MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật

16 Tháng 6, 2025
DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

13 Tháng 6, 2025
GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

GitHub Action DevOpsify Check Tool – Tự động kiểm tra bảo mật & hiệu suất

11 Tháng 6, 2025
DevOpsify

Cộng đồng DevOps Việt Nam chia sẽ kiến thức giúp tăng tốc quá trình phát triển ứng dụng và tự động hóa trong lĩnh vực Cloud DevOps & AI.

Bài viết mới

  • Sử dụng VS Code và Playwright MCP tự động test demo website Demoblaze thông qua GitHub Copilot Agent
  • MCP server 2025 tốt nhất : Hướng dẫn chọn & bảo mật
  • DevOpsify Check Tool hỗ trợ MCP – Tự động hóa kiểm tra qua AI Claude & VS Code

Categories

  • AI & Automation
  • Bảo mật
  • Chưa phân loại
  • DevOps & Cloud
  • Tin tức
No Result
View All Result
  • Home
  • Bảo mật
  • AI & Automation
  • DevOps & Cloud
  • Bộ đề luyện thi cloud

© 2025 DevOpsify