mirror of
https://github.com/AmigaPorts/docker-amiga-gcc.git
synced 2026-05-10 06:44:57 +00:00
QoL fixes for Jenkins
This commit is contained in:
32
JenkinsEnv.json
Normal file
32
JenkinsEnv.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"builds": [
|
||||
{
|
||||
"DockerRoot": "amigadev",
|
||||
"DockerImage": "crosstools",
|
||||
"DockerTag": "m68k-amigaos",
|
||||
"Dockerfile": "m68k-amigaos.docker",
|
||||
"BuildIfSuccessful": ""
|
||||
},
|
||||
{
|
||||
"DockerRoot": "amigadev",
|
||||
"DockerImage": "crosstools",
|
||||
"DockerTag": "ppc-amigaos",
|
||||
"Dockerfile": "ppc-amigaos.docker",
|
||||
"BuildIfSuccessful": ""
|
||||
},
|
||||
{
|
||||
"DockerRoot": "amigadev",
|
||||
"DockerImage": "crosstools",
|
||||
"DockerTag": "ppc-morphos",
|
||||
"Dockerfile": "ppc-morphos.docker",
|
||||
"BuildIfSuccessful": ""
|
||||
},
|
||||
{
|
||||
"DockerRoot": "amigadev",
|
||||
"DockerImage": "crosstools",
|
||||
"DockerTag": "x86_64-aros",
|
||||
"Dockerfile": "x86_64-aros.docker",
|
||||
"BuildIfSuccessful": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
102
Jenkinsfile
vendored
Normal file
102
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
def notify(status){
|
||||
emailext (
|
||||
body: '$DEFAULT_CONTENT',
|
||||
recipientProviders: [
|
||||
[$class: 'CulpritsRecipientProvider'],
|
||||
[$class: 'DevelopersRecipientProvider'],
|
||||
[$class: 'RequesterRecipientProvider']
|
||||
],
|
||||
replyTo: '$DEFAULT_REPLYTO',
|
||||
subject: '$DEFAULT_SUBJECT',
|
||||
to: '$DEFAULT_RECIPIENTS'
|
||||
)
|
||||
}
|
||||
|
||||
@NonCPS
|
||||
def killall_jobs() {
|
||||
def jobname = env.JOB_NAME
|
||||
def buildnum = env.BUILD_NUMBER.toInteger()
|
||||
def killnums = ""
|
||||
def job = Jenkins.instance.getItemByFullName(jobname)
|
||||
def fixed_job_name = env.JOB_NAME.replace('%2F','/')
|
||||
|
||||
for (build in job.builds) {
|
||||
if (!build.isBuilding()) { continue; }
|
||||
if (buildnum == build.getNumber().toInteger()) { continue; println "equals" }
|
||||
if (buildnum < build.getNumber().toInteger()) { continue; println "newer" }
|
||||
|
||||
echo "Kill task = ${build}"
|
||||
|
||||
killnums += "#" + build.getNumber().toInteger() + ", "
|
||||
|
||||
build.doStop();
|
||||
}
|
||||
|
||||
if (killnums != "") {
|
||||
slackSend color: "danger", channel: "#jenkins", message: "Killing task(s) ${fixed_job_name} ${killnums} in favor of #${buildnum}, ignore following failed builds for ${killnums}"
|
||||
}
|
||||
echo "Done killing"
|
||||
}
|
||||
|
||||
def buildStep(DOCKER_ROOT, DOCKERIMAGE, DOCKERTAG, DOCKERFILE, BUILD_NEXT) {
|
||||
def fixed_job_name = env.JOB_NAME.replace('%2F','/')
|
||||
try {
|
||||
checkout scm;
|
||||
|
||||
def buildenv = '';
|
||||
def tag = '';
|
||||
if (env.BRANCH_NAME.equals('master')) {
|
||||
buildenv = 'production';
|
||||
tag = "${DOCKERTAG}";
|
||||
} else if (env.BRANCH_NAME.equals('dev')) {
|
||||
buildenv = 'development';
|
||||
tag = "${DOCKERTAG}-dev";
|
||||
} else {
|
||||
throw new Exception("Invalid branch, stopping build!");
|
||||
}
|
||||
|
||||
docker.withRegistry("https://index.docker.io/v1/", "dockerhub") {
|
||||
def customImage
|
||||
stage("Building ${DOCKERIMAGE}:${tag}...") {
|
||||
customImage = docker.build("${DOCKER_ROOT}/${DOCKERIMAGE}:${tag}", "--build-arg BUILDENV=${buildenv} --network=host --pull -f ${DOCKERFILE} .");
|
||||
}
|
||||
|
||||
stage("Pushing to docker hub registry...") {
|
||||
customImage.push();
|
||||
}
|
||||
}
|
||||
|
||||
if (!BUILD_NEXT.equals('')) {
|
||||
build "${BUILD_NEXT}/${env.BRANCH_NAME}";
|
||||
}
|
||||
} catch(err) {
|
||||
slackSend color: "danger", channel: "#jenkins", message: "Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER} Target: ${DOCKER_ROOT}/${DOCKERIMAGE}:${tag} (<${env.BUILD_URL}|Open>)"
|
||||
currentBuild.result = 'FAILURE'
|
||||
notify("Build Failed: ${fixed_job_name} #${env.BUILD_NUMBER} Target: ${DOCKER_ROOT}/${DOCKERIMAGE}:${tag}")
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
node('master') {
|
||||
killall_jobs();
|
||||
def fixed_job_name = env.JOB_NAME.replace('%2F','/');
|
||||
slackSend color: "good", channel: "#jenkins", message: "Build Started: ${fixed_job_name} #${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)";
|
||||
|
||||
checkout scm;
|
||||
|
||||
def branches = [:]
|
||||
def project = readJSON file: "JenkinsEnv.json";
|
||||
|
||||
project.builds.each { v ->
|
||||
branches["Build ${v.DockerRoot}/${v.DockerImage}"] = {
|
||||
node {
|
||||
buildStep(v.DockerRoot, v.DockerImage, v.DockerTag, v.Dockerfile, v.BuildIfSuccessful)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sh "rm -rf ./*"
|
||||
|
||||
parallel branches;
|
||||
}
|
||||
|
||||
46
ppc-warpos.docker
Normal file
46
ppc-warpos.docker
Normal file
@@ -0,0 +1,46 @@
|
||||
FROM amigadev/morphos-cross-toolchain:warpos as build-env
|
||||
|
||||
FROM amigadev/docker-base:latest
|
||||
|
||||
ENV CROSS_PFX ppc-warpos
|
||||
ENV OS_NAME WarpOS
|
||||
|
||||
COPY --from=build-env /opt/${CROSS_PFX} /opt/${CROSS_PFX}
|
||||
|
||||
# START COMMON
|
||||
MAINTAINER Marlon Beijer "marlon@amigadev.com"
|
||||
RUN apt update && apt install -y libtool automake autoconf && apt autoremove -y
|
||||
RUN echo "root:root" | chpasswd
|
||||
RUN chmod 777 -R /opt/${CROSS_PFX}
|
||||
RUN ln -s /opt/${CROSS_PFX} /tools
|
||||
ENV CROSS_ROOT /opt/${CROSS_PFX}
|
||||
|
||||
WORKDIR /work
|
||||
ENTRYPOINT ["/entry/entrypoint.sh"]
|
||||
|
||||
COPY imagefiles/cmake.sh /usr/local/bin/cmake
|
||||
COPY imagefiles/ccmake.sh /usr/local/bin/ccmake
|
||||
COPY imagefiles/entrypoint.sh /entry/
|
||||
|
||||
ENV AS=${CROSS_ROOT}/bin/${CROSS_PFX}-as \
|
||||
LD=${CROSS_ROOT}/bin/${CROSS_PFX}-ld \
|
||||
AR=${CROSS_ROOT}/bin/${CROSS_PFX}-ar \
|
||||
CC=${CROSS_ROOT}/bin/${CROSS_PFX}-gcc \
|
||||
CXX=${CROSS_ROOT}/bin/${CROSS_PFX}-g++ \
|
||||
RANLIB=${CROSS_ROOT}/bin/${CROSS_PFX}-ranlib
|
||||
|
||||
RUN ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-as /usr/bin/as && \
|
||||
ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-ar /usr/bin/ar && \
|
||||
ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-ld /usr/bin/ld && \
|
||||
ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-gcc /usr/bin/gcc && \
|
||||
ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-g++ /usr/bin/g++ && \
|
||||
ln -sf ${CROSS_ROOT}/bin/${CROSS_PFX}-ranlib /usr/bin/ranlib
|
||||
|
||||
COPY dependencies/toolchains/${CROSS_PFX}.cmake ${CROSS_ROOT}/lib/
|
||||
COPY dependencies/toolchains/Modules/${CROSS_PFX} /CMakeModules
|
||||
RUN mv -fv /CMakeModules/* /usr/share/cmake-`cmake --version|awk '{ print $3;exit }'|awk -F. '{print $1"."$2}'`/Modules/
|
||||
RUN ln -s /usr/share/cmake-`cmake --version|awk '{ print $3;exit }'|awk -F. '{print $1"."$2}'`/Modules/Platform/Generic.cmake /usr/share/cmake-`cmake --version|awk '{ print $3;exit }'|awk -F. '{print $1"."$2}'`/Modules/Platform/${OS_NAME}.cmake
|
||||
ENV CMAKE_TOOLCHAIN_FILE ${CROSS_ROOT}/lib/${CROSS_PFX}.cmake
|
||||
ENV CMAKE_PREFIX_PATH /opt/${CROSS_PFX}:/opt/${CROSS_PFX}/usr
|
||||
ENV PATH ${PATH}:${CROSS_ROOT}/bin
|
||||
# END COMMON
|
||||
Reference in New Issue
Block a user