blob: aa79e60cd3f41186d84f4f27227c97c963c269ab [file] [log] [blame]
def call(body) {
// evaluate the body block, and collect configuration into the object
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
// we need to use Tools library for getting mandatory binary properties
def tools = new ci.mcp.Tools()
def server = Artifactory.server(config.artifactoryServerId ?: "mcp-ci")
def buildInfo = Artifactory.newBuildInfo()
buildInfo.env.capture = true
buildInfo.env.filter.addInclude("*")
buildInfo.env.collect()
def dockerRepo = config.dockerRepo ?: "artifactory.mcp.mirantis.net:5001"
def artifactoryURL = config.artifactoryURL ?: "https://artifactory.mcp.mirantis.net/artifactory/projectcalico"
def nodeImage = config.nodeImage ?: "calico/node"
def nodeImageTag = config.nodeImageTag ?: "v0.20.0"
def nodeName = "${dockerRepo}/${nodeImage}:${nodeImageTag}"
def ctlImage = config.ctlImage ?: "calico/ctl"
def ctlImageTag = config.ctlImageTag ?: "v0.20.0"
def ctlName = "${dockerRepo}/${ctlImage}:${ctlImageTag}"
// calico/build goes from {artifactoryURL}/mcp/libcalico/
def buildImage = config.buildImage ?: "${artifactoryURL}/mcp/libcalico/lastbuild".toURL().text.trim()
// calico/felix goes from {artifactoryURL}/mcp/felix/
def felixImage = config.felixImage ?: "${artifactoryURL}/mcp/felix/lastbuild".toURL().text.trim()
def confdBuildId = config.confdBuildId ?: "${artifactoryURL}/mcp/confd/lastbuild".toURL().text.trim()
def confdUrl = config.confdUrl ?: "${artifactoryURL}/mcp/confd/confd-${confdBuildId}"
def birdBuildId = config.birdBuildId ?: "${artifactoryURL}/mcp/calico-bird/lastbuild".toURL().text.trim()
def birdUrl = config.birdUrl ?: "${artifactoryURL}/mcp/calico-bird/bird-${birdBuildId}"
def bird6Url = config.bird6Url ?: "${artifactoryURL}/mcp/calico-bird/bird6-${birdBuildId}"
def birdclUrl = config.birdclUrl ?: "${artifactoryURL}/mcp/calico-bird/birdcl-${birdBuildId}"
def gitCommit = sh(returnStdout: true, script: "git -C ${WORKSPACE} rev-parse --short HEAD").trim()
def build = "${config.containersBuildId}-${gitCommit}"
// return values
def calicoNodeImageRepo="${dockerRepo}/${nodeImage}"
def calicoCtlImageRepo="${dockerRepo}/${ctlImage}"
def calicoVersion="${nodeImageTag}-${build}"
// Start build section
stage ('Build calico/ctl image'){
sh """
make ctl_image \
CTL_CONTAINER_NAME=${ctlName}-${build} \
BUILD_CONTAINER_NAME=${buildImage} \
BIRDCL_URL=${birdclUrl}
"""
}
stage('Build calico/node'){
sh """
make node_image \
NODE_CONTAINER_NAME=${nodeName}-${build} \
BUILD_CONTAINER_NAME=${buildImage} \
FELIX_CONTAINER_NAME=${felixImage} \
CONFD_URL=${confdUrl} \
BIRD_URL=${birdUrl} \
BIRD6_URL=${bird6Url} \
BIRDCL_URL=${birdclUrl}
"""
}
stage('Publishing containers artifacts'){
withCredentials([
[$class: 'UsernamePasswordMultiBinding',
credentialsId: "${config.credentialsId}",
passwordVariable: 'ARTIFACTORY_PASSWORD',
usernameVariable: 'ARTIFACTORY_LOGIN']
]) {
sh """
echo 'Pushing images'
docker login -u ${ARTIFACTORY_LOGIN} -p ${ARTIFACTORY_PASSWORD} ${dockerRepo}
docker push ${nodeName}-${build}
docker push ${ctlName}-${build}
"""
}
dir("artifacts"){
// Save the last build ID
writeFile file: "lastbuild", text: "${build}"
// Create config yaml for Kargo
writeFile file: "calico-containers-${build}.yaml",
text: """\
calico_node_image_repo: ${calicoNodeImageRepo}
calicoctl_image_repo: ${calicoCtlImageRepo}
calico_version: ${calicoVersion}
""".stripIndent()
// Create the upload spec.
def properties = tools.getBinaryBuildProperties()
def uploadSpec = """{
"files": [
{
"pattern": "**",
"target": "projectcalico/${config.containersBuildId}/calico-containers/",
"props": "${properties}"
}
]
}"""
// Upload to Artifactory.
server.upload(uploadSpec, buildInfo)
server.publishBuildInfo buildInfo
} // dir artifacts
} //stage
return [
CALICO_NODE_IMAGE_REPO:"${calicoNodeImageRepo}",
CALICOCTL_IMAGE_REPO:"${calicoCtlImageRepo}",
CALICO_VERSION: "${calicoVersion}"
]
}