stages: - get_version - build - deploy variables: HARBOR_PROJECT: "yescent" ProjectName: "Yes.Blog" PackageName: "yes.blog" AppPort: "9009" DockerfilePath: "./${ProjectName}/Dockerfile" #DockerImage: "${HARBOR_HOST}/${HARBOR_PROJECT}/${PackageName}" DockerImage: "${Ali_Docker_Registry}/yescent/${PackageName}" #ProductionDockerImage: "${HARBOR_HOST}/${HARBOR_PROJECT}/${PackageName}" ProductionDockerImage: "${Ali_Docker_Registry}/yescent/${PackageName}" AliDockerImage: "${Ali_Docker_Registry}/yescent/${PackageName}" build_develop: stage: build script: - Version=$(sed -n 's/.*\([^<]*\)<\/Version>.*/\1/p' ./${ProjectName}/${ProjectName}.csproj) - echo "v${Version}-develop${CI_PIPELINE_ID}" - docker build -f ${DockerfilePath} -t ${DockerImage}:v${Version}-develop${CI_PIPELINE_ID} . - docker login -u ${Ali_Docker_UserName} -p ${Ali_Docker_Password} ${Ali_Docker_Registry} - docker push ${DockerImage}:v${Version}-develop${CI_PIPELINE_ID} only: - develop build_release: stage: build script: - Version=$(sed -n 's/.*\([^<]*\)<\/Version>.*/\1/p' ./${ProjectName}/${ProjectName}.csproj) - docker build -f ${DockerfilePath} -t ${ProductionDockerImage}:v${Version}-release${CI_PIPELINE_ID} . - docker login -u ${Ali_Docker_UserName} -p ${Ali_Docker_Password} ${Ali_Docker_Registry} - docker push ${ProductionDockerImage}:v${Version}-release${CI_PIPELINE_ID} only: - release build_master: stage: build script: - Version=$(sed -n 's/.*\([^<]*\)<\/Version>.*/\1/p' ./${ProjectName}/${ProjectName}.csproj) - docker build -f ${DockerfilePath} -t ${AliDockerImage}:v${Version}.${CI_PIPELINE_ID} . - docker tag ${AliDockerImage}:v${Version}.${CI_PIPELINE_ID} ${AliDockerImage}:latest - docker login -u ${Ali_Docker_UserName} -p ${Ali_Docker_Password} ${Ali_Docker_Registry} - docker push ${AliDockerImage}:v${Version}.${CI_PIPELINE_ID} - docker rm -f ${AliDockerImage}:latest && docker push ${AliDockerImage}:latest only: - master deploy_develop: stage: deploy before_script: - Version=$(sed -n 's/.*\([^<]*\)<\/Version>.*/\1/p' ./${ProjectName}/${ProjectName}.csproj) ## 安装ssh-agent - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) ## 将GitLab服务器私钥添加到ssh-agent代理中 - chmod 400 "$SSH_PRIVATE_KEY" - ssh-add "$SSH_PRIVATE_KEY" ## 创建~/.ssh目录 - mkdir -p ~/.ssh - chmod 700 ~/.ssh ## 创建SSH_KNOWN_HOSTS - cp "$SSH_KNOWN_HOSTS_105" ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: - ssh -t ${Test_Server_Ip} "(docker stop ${PackageName} && docker rm ${PackageName} || echo 'Container ${PackageName} not found, skipping removal.') && docker login -u ${HARBOR_USERNAME} -p ${HARBOR_PASSWORD} ${HARBOR_HOST} && docker run -e TZ=Asia/Shanghai -d --restart=always -v /data/yesblog:/app/files --name ${PackageName} -p ${AppPort}:8080 ${DockerImage}:v${Version}-develop${CI_PIPELINE_ID}" only: - develop deploy_production: stage: deploy before_script: - Version=$(sed -n 's/.*\([^<]*\)<\/Version>.*/\1/p' ./${ProjectName}/${ProjectName}.csproj) ## 安装ssh-agent - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) ## 将GitLab服务器私钥添加到ssh-agent代理中 - chmod 400 "$SSH_PRIVATE_KEY" - ssh-add "$SSH_PRIVATE_KEY" ## 创建~/.ssh目录 - mkdir -p ~/.ssh - chmod 700 ~/.ssh ## 创建SSH_KNOWN_HOSTS - cp "$Production_SSH_KNOWN_HOSTS" ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: - ssh -t ${Production_Server_Ip} "(docker stop ${PackageName} && docker rm ${PackageName} || echo 'Container ${PackageName} not found, skipping removal.') && docker login -u ${HARBOR_USERNAME} -p ${HARBOR_PASSWORD} ${HARBOR_HOST} && docker run -e TZ=Asia/Shanghai -d --restart=always -v /data/yesblog:/app/files --name ${PackageName} -p ${AppPort}:8080 ${ProductionDockerImage}:v${Version}-release${CI_PIPELINE_ID}" only: - release