Jenkins CI
Jenkins Variables
Jenkins 提供了许多内置变量,可以用来生成唯一的镜像标签。常用的变量包括:
-
BUILD_ID:当前构建的唯一 ID。
-
BUILD_NUMBER:当前构建的编号(每次构建递增)。
-
GIT_COMMIT:当前 Git 提交的 SHA-1 哈希值(前 7 位即可)。
-
BRANCH_NAME:当前 Git 分支的名称。
Classic Jenkinsfile Example
pipeline {
environment {
// DOCKER_IMAGE_TAG = "${env.GIT_COMMIT.substring(0, 7)}"
DOCKER_IMAGE_TAG = "0.${env.BUILD_NUMBER}"
DOCKER_IMAGE = "harbor.frombyte.auto/library/my-nginx:${DOCKER_IMAGE_TAG}"
REGISTRY_CREDENTIAL = '53464224-8c68-45a8-adb1-e8974d14e122'
}
agent {
node {
label 'rancher'
}
}
stages {
stage('Check Tools Version') {
steps {
sh 'git --version'
sh 'docker --version'
}
post {
failure {
echo "Error: Failed to check tools version!"
}
}
}
stage('Prepare') {
steps {
sh '''
if [ ! -d "automation" ]; then
git clone https://gitea.tryanks.com/burgess/automation.git
cd automation
else
cd automation
git fetch --all
git reset --hard origin/main
fi
'''
}
post {
failure {
echo "Error: Failed to prepare the repository!"
}
}
}
stage('Build') {
steps {
sh 'cd automation && docker build -t ${DOCKER_IMAGE} .'
}
post {
failure {
echo "Error: Failed to build the Docker image!"
}
}
}
stage('Push') {
steps {
withCredentials([usernamePassword(
credentialsId: "${REGISTRY_CREDENTIAL}",
usernameVariable: 'HARBOR_USERNAME',
passwordVariable: 'HARBOR_PASSWORD'
)]) {
sh '''
docker login -u ${HARBOR_USERNAME} -p ${HARBOR_PASSWORD} harbor.frombyte.auto
docker push ${DOCKER_IMAGE}
docker logout
'''
}
}
post {
failure {
echo "Error: Failed to push the Docker image!"
}
}
}
}
post {
always {
sh 'docker rmi ${DOCKER_IMAGE} || true'
}
failure {
echo "Pipeline failed! Check the logs for more details."
}
success {
echo "Pipeline succeeded!"
}
}
}