Docker 作为工具
功能介绍
是否在编写 CI 流程中经常遇到:
- 这个工具没有,那个 sdk 没有的情况。
- apt-get install 又安装不到最新的,也有可能今天安装时这个版本,明天安装的是那个版本。
- 写出的了 Jenkinsfile 可移植性很差。
- 经常 Jenkinsfile 需要调整。
希望通过这边文章抛砖引玉,通过几个小例子学习 Docker 在我们构建流程中的使用,提高 Jenkinsfile 的可维护性,降低编写难度,减少工具问题的困扰。
您也可以查阅文章:
- 自定义构建环境
- 使用 Docker
- 新版 CI 3.0 引擎 基于 Docker 生态的持续集成引擎
tccli
方案一:自定义构建环境
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('tccli') {
agent {
docker {
image 'tencentcom/tencentcloud-cli'
reuseNode 'true'
args '--entrypoint='
registryUrl 'https://docker.io'
}
}
steps {
sh 'tccli --version'
}
}
}
}
方案二:原生 docker 命令
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('tccli') {
steps {
sh """docker run -w $WORKPSACE -v $WORKPSACE:$WORKPSACE --entrypoint= tencentcom/tencentcloud-cli bash -c "tccli --version"""""
}
}
}
}
方案三:docker 插件
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('tccli') {
steps {
script {
docker.image("tencentcom/tencentcloud-cli").inside('--entrypoint=') {
sh "tccli --version"
}
}
}
}
}
}
coscmd
方案一:自定义构建环境
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('coscmd') {
agent {
docker {
image 'tencentcom/tencentyun-coscmd'
reuseNode 'true'
args '--entrypoint='
registryUrl 'https://docker.io'
}
}
steps {
sh 'coscmd -v'
sh """coscmd -b bucket-111111 -r ap-guangzhou copy bucket-111111.ap-guangzhou.myqcloud.com/1.txt / -H "{'Content-Disposition': 'inline'}" """
}
}
}
}
方案二:原生 docker 命令
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('coscmd') {
steps {
sh """docker run -w $WORKSPACE -v $WORKSPACE:$WORKSPACE --entrypoint= tencentcom/tencentyun-coscmd bash -c "coscmd -v" """
}
}
}
}
方案三:docker 插件
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage('coscmd') {
steps {
script {
docker.image("tencentcom/tencentyun-coscmd").inside('--entrypoint=') {
sh "coscmd -v"
}
}
}
}
}
}
问题反馈 >
2024-11-07最近更新
感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。