Commit 1bb203d8 authored by nanahira's avatar nanahira

multi-arch ci

parent 7baeb6b4
Pipeline #3406 failed with stages
in 4 minutes and 30 seconds
image: docker:latest
services:
- docker:dind
stages: stages:
- build - build
- test - combine
- deploy - deploy
variables: variables:
CI_IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG GIT_DEPTH: "1"
LAST_VERSION_FILE: .last_version CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CI_ENV_FILE: .ci.env CONTAINER_TEST_ARM_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-arm
CONTAINER_TEST_X86_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG-x86
CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker-build: build-x86:
stage: build stage: build
cache: tags:
paths: - docker
- $LAST_VERSION_FILE
artifacts:
reports:
dotenv: $CI_ENV_FILE
expire_in: 30 minutes
before_script:
- apk add bash curl jq
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script: script:
- chmod +x ./build.sh && /bin/bash ./build.sh - docker build --pull -t $CONTAINER_TEST_X86_IMAGE .
- docker push "${CI_IMAGE_TAG}" - docker push $CONTAINER_TEST_X86_IMAGE
only:
changes:
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
build-arm:
stage: build
tags:
- docker-arm
script:
- docker build --pull -f Dockerfile.arm -t $CONTAINER_TEST_ARM_IMAGE .
- docker push $CONTAINER_TEST_ARM_IMAGE
docker-tests: combine:
stage: test stage: combine
dependencies: tags:
- docker-build - docker
image: ymuski/curl-http3
services:
- name: "$CI_IMAGE_TAG"
alias: nginxquic
script: script:
- curl --http3 -v --silent --insecure "https://nginxquic:443" - docker pull $CONTAINER_TEST_X86_IMAGE
- /opt/httpstat.sh --http3 "https://nginxquic:443" - docker pull $CONTAINER_TEST_ARM_IMAGE
only: - docker manifest create $CONTAINER_TEST_IMAGE --amend $CONTAINER_TEST_X86_IMAGE --amend $CONTAINER_TEST_ARM_IMAGE
changes: - docker manifest push $CONTAINER_TEST_IMAGE
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
deploy_latest:
stage: deploy
tags:
- docker
script:
- docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master
docker-publish: deploy_tag:
stage: deploy stage: deploy
dependencies: tags:
- docker-build - docker
- docker-tests
variables: variables:
FULL_VERSION: $FULL_VERSION CONTAINER_TAG_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
VERSION: $VERSION
cache:
paths:
- $LAST_VERSION_FILE
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker login -u "$DP_REGISTRY_USER" -p "$DP_REGISTRY_PASSWORD" $DP_REGISTRY
script: script:
- docker pull "${CI_IMAGE_TAG}" - docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_TAG_IMAGE
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:latest" - docker push $CONTAINER_TAG_IMAGE
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:${VERSION}"
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:${VERSION}-archlinux"
- docker push "${CI_REGISTRY_IMAGE}:latest"
- docker push "${CI_REGISTRY_IMAGE}:${VERSION}"
- docker push "${CI_REGISTRY_IMAGE}:archlinux"
- docker push "${CI_REGISTRY_IMAGE}:${VERSION}-archlinux"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:latest"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:${VERSION}"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:${VERSION}-archlinux"
- docker push "${DP_REGISTRY_IMAGE}:latest"
- docker push "${DP_REGISTRY_IMAGE}:${VERSION}"
- docker push "${DP_REGISTRY_IMAGE}:archlinux"
- docker push "${DP_REGISTRY_IMAGE}:${VERSION}-archlinux"
- echo $FULL_VERSION > $LAST_VERSION_FILE
only: only:
refs: - tags
- master
- schedules
- web
variables:
- $DP_REGISTRY && $DP_REGISTRY_USER && $DP_REGISTRY_PASSWORD && $DP_REGISTRY_IMAGE
changes:
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
FROM archlinux:base-devel FROM archlinux/archlinux:base-devel
RUN set -x \ RUN set -x \
&& echo 'Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist \
&& groupadd --gid 101 --system nginx \ && groupadd --gid 101 --system nginx \
&& useradd --uid 101 --gid nginx --system --create-home --home-dir /var/cache/nginx --shell /sbin/nologin nginx \ && useradd --uid 101 --gid nginx --system --create-home --home-dir /var/cache/nginx --shell /sbin/nologin nginx \
&& echo "nginx ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nginx \ && echo "nginx ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nginx \
......
FROM lopsided/archlinux:devel
RUN set -x \
&& echo 'Server = https://mirrors.aliyun.com/archlinuxarm/$arch/$repo/' > /etc/pacman.d/mirrorlist \
&& groupadd --gid 101 --system nginx \
&& useradd --uid 101 --gid nginx --system --create-home --home-dir /var/cache/nginx --shell /sbin/nologin nginx \
&& echo "nginx ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/nginx \
&& pacman --noconfirm -Sy git \
&& mkdir -m 777 /aur \
&& su nginx -s /bin/sh -c " \
cd /aur \
&& git clone https://aur.archlinux.org/nginx-quic.git \
&& cd nginx-quic \
&& makepkg -scri --noconfirm \
" \
&& rm -f /etc/sudoers.d/nginx \
&& rm -rf /aur \
&& rm -rf /var/cache/pacman/pkg/*
RUN openssl req -x509 -newkey rsa:4096 -days 365 -subj '/CN=localhost/O=localhost/C=US' \
-nodes -keyout /etc/nginx/cert.key -out /etc/nginx/cert.pem \
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
EXPOSE 443/tcp
EXPOSE 443/udp
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment