1) Connecting to a Version Control System (VCS)
https://github.com/mrnim94/Accounting
2) VCS Root Connections and Open Authentication
Ở phần 1 chúng ta đã khai báo username/token github
Phần này chúng ta cần để tạo project dựa trên các repo trên github.
Mình ví dụ mình muốn tạo 1 project cho repo Accouting
Giờ ta vào github cấu hình
3) Ways of organizing your projects in TeamCity
Projects tend to group build configurations
Build configurations include the instructions of building and deploying code
Root Project
Build and Package (Project)
Accounting
Fixed Asset
Deployments (Project)
Accounting
Root Project
Accounting (Project)
Build and package
Deploy to QA environment
Deploy to Production environment
Fixed Assets (Project)
Build and package
Deploy to QA environment
Deploy to Production environmen
4) Creating your first TeamCity project
Đầu tiên bạn cần tạo 1 project
Giờ đến phần chúng ta tạo Build Configurations trong project
5) Tools, Build Steps, Parameters and Templates!
6) How to use the Environment (env) of TeamCity
https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
https://docs.testfairy.com/Continuous_Integration/TeamCity.html
In TeamCity, add a environment variable as a New Parameter in to the Build Configuration
Name the parameter env.TESTFAIRY_API_KEY
and give it the value you copied from the TestFairy preferences page, and Save.
Add a Build Step to the Build Configuration you wish to deploy from.
Make sure to select a Command Line build step.
Copy the following command into Custom script text field
curl https://upload.testfairy.com/api/upload -F api_key=${env.TESTFAIRY_API_KEY} -F comment="TeamCity build" -F file=@android.apk
With Linux Agents
BUILD_NUMBER=%env.BUILD_NUMBER% docker tag "${!DYNAMIC_IMG_NAME}" "${!DYNAMIC_IMG_NAME}-${BUILD_NUMBER}" docker push "${!DYNAMIC_IMG_NAME}-${BUILD_NUMBER}"
branch_name="%teamcity.build.branch%" # Replace '/' with '_' in branch name formatted_branch_name=${branch_name//\//_} # Sử dụng cú pháp $() để chèn biến formatted_branch_name vào JSON json_payload=$(cat <<EOF { "git-branch": "${formatted_branch_name}", "integration-command": "node index.js -e staging -a integration", "delay-in-seconds": "600" } EOF ) curl -X POST https://spinner.nimtechnology.com/webhook \ -H 'Content-Type: application/json' \ -H "Authorization: %env.INTEGRATION_TOKEN%" \ -d "$json_payload"
Trong đoạn mã trên, chúng ta sử dụng cú pháp $(cat <<EOF ... EOF)
để tạo một chuỗi JSON có chứa biến formatted_branch_name
. Cách làm này đảm bảo rằng giá trị của formatted_branch_name
được đánh giá và thay thế vào chuỗi JSON trước khi câu lệnh curl
được thực thi.
Nếu sau khi áp dụng cách trên mà bạn vẫn gặp vấn đề với việc truyền giá trị biến vào JSON, hãy đảm bảo rằng biến formatted_branch_name
có giá trị mong muốn trước khi thực thi lệnh curl
. Bạn có thể kiểm tra điều này bằng cách thêm echo "${json_payload}"
trước câu lệnh curl
để in ra nội dung của biến json_payload
và xác nhận rằng nó chứa giá trị đúng của formatted_branch_name
.
With Windows Agents
docker tag $env:DOCKER_IMAGE_WIN $env:DOCKER_IMAGE_WIN-$env:BUILD_NUMBER docker push $env:DOCKER_IMAGE_WIN-$env:BUILD_NUMBER
Get environment/parameter hidden on teamcity
set -eux
auth="$(echo -n "$USER:$PASSWORD" | base64)"
echo "##teamcity[hide text='$auth']"
# Other code
echo cvbjNEVQ== | base64 --decode
Get the branch name or tag name when TeamCity runs the pipeline.
Bạn sẽ muốn lấy branch name hoặc tag name để gắn làm tag cho image khi build docker.
$vcsRoot = "%teamcity.build.branch%"
Write-Host $vcsRoot
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin "$env:AWS_ACCOUNT.dkr.ecr.us-west-2.amazonaws.com" docker tag $env:DOCKER_IMAGE_WIN $env:DOCKER_IMAGE_WIN-$env:BUILD_NUMBER-"%teamcity.build.branch%" docker push $env:DOCKER_IMAGE_WIN-$env:BUILD_NUMBER-"%teamcity.build.branch%"
Issues when using the branch name to attach a tag for the docker image
Khi branch name là: feature/NIM-297
thì docker image là: XXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/nim_resultmq:dev-45331401-linux-1694-feature/NIM-297
Error parsing reference: "XXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/nim_resultmq:dev-45331401-linux-1694-feature/NIM-297" is not a valid repository/tag: invalid reference format invalid reference format Error response from daemon: invalid reference format
chúng ta sẽ cần replace “/” sang “_”
trên Linux:
# Original branch name branch_name="%teamcity.build.branch%" # Replace '/' with '_' in branch name formatted_branch_name=${branch_name//\//_} docker push "XXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/nim_resultmq:dev-45331401-linux-1694-$formatted_branch_name"
Trên Windows:
# Original branch name $branch_name = "%teamcity.build.branch%" # Replace '/' with '_' in branch name $formatted_branch_name = $branch_name -replace "/", "_" docker push XXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/nim_resultmq:dev-45331401-linux-1694-"$formatted_branch_name"