Jenkinsfile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. pipeline {
  2. agent none
  3. stages {
  4. stage('Test') {
  5. agent {
  6. docker {
  7. image 'ghcr.io/cleanc-lab/rust:1.72.0-slim-bookworm'
  8. args '--privileged --net=host -v /var/run/docker.sock:/var/run/docker.sock'
  9. }
  10. }
  11. stages {
  12. stage('Build') {
  13. steps {
  14. sh 'cargo build'
  15. }
  16. }
  17. stage('Nextest') {
  18. steps {
  19. sh '/usr/local/cargo/bin/cargo-nextest nextest run'
  20. }
  21. }
  22. }
  23. }
  24. stage('Docker') {
  25. agent {
  26. docker {
  27. image 'docker:24-cli'
  28. args '--privileged -v /var/run/docker.sock:/var/run/docker.sock'
  29. }
  30. }
  31. when {
  32. anyOf {
  33. branch 'interstellar-next';
  34. branch 'interstellar-dev';
  35. buildingTag();
  36. }
  37. }
  38. environment {
  39. DOCKER_REGISTRY = 'ghcr.io'
  40. GITHUB_ORG = 'interstellar-relay-community'
  41. DOCKER_IMAGE = "${env.DOCKER_REGISTRY}/${env.GITHUB_ORG}/aode-relay"
  42. GHCR_TOKEN = credentials('siliconforest-jenkins-github-pat-package-rw')
  43. }
  44. stages {
  45. stage('Prepare') {
  46. steps {
  47. script {
  48. if (env.BRANCH_NAME == 'interstellar-next') {
  49. env.DOCKER_TAG = 'latest'
  50. } else if (env.BRANCH_NAME == 'interstellar-dev') {
  51. env.DOCKER_TAG = 'develop'
  52. } else {
  53. env.DOCKER_TAG = env.TAG_NAME
  54. }
  55. }
  56. }
  57. }
  58. stage('Docker login') {
  59. steps {
  60. sh 'echo $GHCR_TOKEN_PSW | docker login ghcr.io -u $GHCR_TOKEN_USR --password-stdin'
  61. }
  62. }
  63. stage('Build') {
  64. matrix {
  65. axes {
  66. axis {
  67. name 'TARGET'
  68. values 'amd64', 'arm64'
  69. }
  70. }
  71. stages {
  72. stage('Build platform specific image') {
  73. steps {
  74. sh "docker buildx create --name container-${TARGET} --driver=docker-container"
  75. sh "docker buildx build --builder container-${TARGET} -t $DOCKER_IMAGE:$DOCKER_TAG-${TARGET} --platform linux/${TARGET} ."
  76. }
  77. }
  78. stage('Push platform specific image') {
  79. steps {
  80. sh "docker push $DOCKER_IMAGE:$DOCKER_TAG-${TARGET}"
  81. }
  82. }
  83. }
  84. }
  85. }
  86. stage('Docker manifest') {
  87. steps {
  88. sh "docker manifest create $DOCKER_IMAGE:$DOCKER_TAG --amend $DOCKER_IMAGE:$DOCKER_TAG-amd64 --amend $DOCKER_IMAGE:$DOCKER_TAG-arm64"
  89. }
  90. }
  91. stage('Docker push') {
  92. steps {
  93. sh "docker manifest push $DOCKER_IMAGE:$DOCKER_TAG"
  94. }
  95. }
  96. }
  97. post {
  98. always {
  99. sh 'docker logout "$DOCKER_REGISTRY"'
  100. }
  101. }
  102. }
  103. }
  104. }