jenkins - Jenkins 声明式管道 - SCM
问题描述
我正在学习一些 Jenkins 教程。我阅读的示例代码是
pipeline {
agent none
stages {
stage('Build') {
agent {
docker {
image 'python:2-alpine'
}
}
steps {
sh 'python -m py_compile sources/add2vals.py sources/calc.py'
}
}
stage('Test') {
agent {
docker {
image 'qnib/pytest'
}
}
steps {
sh 'py.test --verbose --junit-xml test-reports/results.xml sources/test_calc.py'
}
post {
always {
junit 'test-reports/results.xml'
}
}
}
stage('Deliver') {
agent {
docker {
image 'cdrx/pyinstaller-linux:python2'
}
}
steps {
sh 'pyinstaller --onefile sources/add2vals.py'
}
post {
success {
archiveArtifacts 'dist/add2vals'
}
}
}
}
}
所以基本上有三个步骤Build
,Test
和Deliver
。它们都使用不同的图像来生成不同的容器。但是这个 Jenkins 作业被配置为Git
使用SCM
.
因此,如果运行此 Jenkins 构建,则表示该项目构建在第一个容器上。然后第二阶段是在另一个容器上测试项目,然后在第三个容器上交付。这个 Jenkins 工作如何确保这三个步骤在代码上按顺序执行。
根据我的理解,每个阶段都需要执行git clone/git pull
,并且在阶段完成之前,git push
是必需的。
如果SCM
IS通过Jenkins配置使用Git
,是否需要包含Jenkins的git clone/git pull', as well as 'git push' in the corresponding shell scripts(under
steps , or it it already taken into consideration by the
SCM`功能?
谢谢
解决方案
在这种情况下,您必须确保 QA 环境中的二进制文件必须与 UAT 环境和生产环境中的二进制文件相同。为此,您必须使用工件存储库或注册表(Artifactory、Nexus、Docker Registry 等)将工件提升到生产环境。查看这个链接,看看它是如何在管道中完成的。
推荐阅读
- sqlite - 如何使用终端在sqlite的blob列中插入文件数据
- android - 如何清除导航组件中的碎片堆栈?
- php - 在 PrestaShop 中调用新订单挂钩参数的 api
- regex - 搜索只匹配一次时得到错误结果
- java - PKIX 路径构建失败 - 在有效的让我们加密证书上
- java - 在 ResourceHandler.kt Readium 类中找不到 get() 方法的用法
- reactjs - React 路由器在更改路由和返回时保留查询参数
- python - 数据框添加列:具有条件的行数
- javascript - 防止按钮单击事件刷新页面
- react-native - 带有本机反应的 TCP 服务器模式