我正在尝试配置Jenkins 管道以执行以下任务:
Git lab使用Web Hook启动Jenkins工作。
从git repo中提取数据。 (完成)
启动docker容器以测试Angular应用程序。 (完成)
下载Google Chrome并在docker容器中安装。 (完成)
使用Karma运行Angular测试。 (完成)
检查提交是否已标记为Release
。
如果不是这样的话就停止。
如果是这种情况,则部署应用程序以测试环境
什么阻碍了进展:
我不知道如何检查Git提交是否标记为Release
或不。
如果标签中没有标签,如何停止构建?
我还注意到输出GIT_COMMIT
env变量它始终为null
echo "Commit: ${env.GIT_COMMIT}"
管道{
agent none
stages {
// Starge 1: Get the data from git
stage('Preparation') {
agent any
steps {
git branch: 'master', credentialsId: 'MY_CREDENTIALS', url: 'http://gitlab/root/test2.git'
}
}
// Stage 2: Build the image and test the repo
stage("Start docker and run the tests") {
agent {
//dockerfile true
docker {
//image 'node:latest'
image 'teracy/angular-cli'
args '-u root --network=gitlab_inet'
}
}
steps {
echo "Tag: ${env.BUILD_TAG}"
sh 'wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb &>/dev/null'
sh 'dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install'
sh 'rm -f google-chrome-stable_current_amd64*'
sh 'export CHROME_BIN=/usr/bin/google-chrome'
sh 'ng -v'
sh 'npm install && npm run test'
}
}
}
}
有关配置的说明:
我正在使用gitlab并在Jenkins上使用gitlab插件。
有关管道的说明
我知道使用自由样式构建我可以在Refspec
字段中指定标记。但是我想构建一个管道并为每个构建产生一个docker容器。
答案 0 :(得分:1)
我认为这可以帮到你
pipeline {
agent any
stages {
stage ('Checkout') {
steps {
git branch: 'master', credentialsId: 'xxx', url: 'url-to-my-gitrepo.git'
}
}
stage ('Optional Deploy') {
when {
expression {
TAG = sh returnStdout: true, script: 'git tag --contains ' + "\$(git log --pretty=format:%h -n 1)" + ''
return TAG == 'Release'
}
}
steps {
echo 'Commit contains a tag RELEASE'
echo 'Deploying'
}
}
}
post {
always {
cleanWs()
}
}
}
这将首先检查您的主分支。然后它将通过一个表达式。我创建了一个变量TAG
。此标记包含您提交的TAG。所以要理解,首先我会得到我的回购的最后一次提交:
git log --pretty=format:%h -n 1
然后我将检查该特定提交上是否有标记并修改输出:
git tag --contains COMMITHASH.trim()
最后我要比较一下TAG == 'Release'
。
如果是,它将在下一个steps
部分和echo
两个部分进行,您可以开始部署。如果它与完成的管道不匹配并清除帖子部分中的所有内容。