linux怎么查看本机内存大小
291
2022-10-05
Gitlab CI 创建 angularjs和 .net 的容器镜像
这两天有个新的需求,需要在Gitlab里面配置两个子目录来存放不同的angularjs和.net的代码,然后各自生成对应的docker image。基本结构是这样的,最外面有个.gitlab-ci.yml 文件,他同级的有两个目录。在这个外面的.gitlab-ci.yml里面循环调用子目录里面的.gitlab-ci.yml,实现二级目录的pipeline。
.gitlab-ci.yml angularjs_project - .gitlab-ci.yml - Dockerfile - other files.. dotnet_project - .gitlab-ci.yml - Dockerfile - other files..
下面看看具体如何实现。
父目录
最外面的.gitlab-ci.yml
stages: - tag - child_pipeline dotnet: stage: child_pipeline variables: CHILD_PIPELINE_EXECUTION_CONTEXT: "dotnet_project" trigger: include: .sub-gitlab-ci.yml strategy: depend angularjs: stage: child_pipeline variables: CHILD_PIPELINE_EXECUTION_CONTEXT: "angularjs_project" trigger: include: .sub-gitlab-ci.yml strategy: depend
子目录 Anjularjs
首先我们先建立一个演示用的anjularjs的程序
ng new app-to-run-inside-docker cd app-to-run-inside-docker ng serve
如果成功的话可以直接通过 Http://localhost:4200 访问然后我们生成一个dist的目录
ng build --prod
把这个目录拷到nginx里面就能跑了Dockerfile
FROM nginx:alpine COPY /dist/app-to-run-inside-docker /usr/share/nginx/html EXPOSE 80
如果我们把build和copy的步骤放在一起,可以优化一下Dockerfile
FROM node:alpine AS my-app-build WORKDIR /app COPY . . RUN npm ci && npm run build FROM nginx:alpine COPY --from=my-app-build /app/dist/app-to-run-inside-docker /usr/share/nginx/html EXPOSE 80
把这些对应的文件commit到repo的目录里面就okay了
子目录 .net core
我们给.net core也生成一个演示的程序
dotnet new webapp -o aspnetcoreapp
然后创建对应的Dockerfile
ROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env WORKDIR /app #Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore #Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out #Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:6.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "aspnetcoreapp.dll"]
commit 代码
下面是一个demo的 .git-lab.yml 文件,其中我调用了2个开源的小项目,一个可以获取当前branch的tag,自动根据版本号命名规则升级版本号,保存在.env里面的tagName里面,另外一个可以读取这个值,然后给branch赋值新的tag。其余部分就是docker build和保存docker image到Azure Container Registry里面。 注意我使用了Docker in Docker,因此如果runner是自己启动的,记得修改配置文件。https://techoverflow.net/2021/01/12/how-to-fix-gitlab-ci-error-during-connect-post-http-docker2375-v1-40-auth-dial-tcp-lookup-docker-on-no-such-host/
stages: - tag - release - build - test generate_tag: stage: tag image: alpine/git-tag:latest rules: # - if: $CI_COMMIT_TAG # when: never # Do not run this job when a tag is created manually # - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch script: - echo "create tag for branch $CI_DEFAULT_BRANCH" - /entrypoint.sh - cat build.env - ls -lah - echo "CI_COMMIT_REF_NAME is ${CI_COMMIT_REF_NAME}" artifacts: reports: dotenv: $(pwd)/dotnet_project/build.env release_job: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest dependencies: - generate_tag rules: - if: $CI_COMMIT_TAG when: never # Do not run this job when a tag is created manually - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch script: - echo "running release_job for $TAG" release: # See for available properties tag_name: 'v$tagName' description: 'v$tagName' ref: '$CI_COMMIT_SHA' # The tag is created from the pipeline SHA. docker_build: stage: build image: docker services: - docker:dind environment: name: staging variables: IMAGE_NAME: "dotnet_demo" CONTAINER_SERVER: "gitlabazuredemo.azurecr.io" script: - echo "Clean space" - docker system prune -f - echo "Login to Azure Container Registry" - docker login ${CONTAINER_SERVER} --username ${ARM_CLIENT_ID} --password ${ARM_CLIENT_SECRET} - echo "Build docker image ${IMAGE_NAME}" - docker build -t ${CONTAINER_SERVER}/${IMAGE_NAME} . - echo "Docker tag and push" - docker tag ${CONTAINER_SERVER}/${IMAGE_NAME} ${CONTAINER_SERVER}/${IMAGE_NAME}:${tagName} - docker tag ${CONTAINER_SERVER}/${IMAGE_NAME} ${CONTAINER_SERVER}/${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} - docker push ${CONTAINER_SERVER}/${IMAGE_NAME}:${tagName} - docker push ${CONTAINER_SERVER}/${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} - docker push ${CONTAINER_SERVER}/${IMAGE_NAME}:latest rules: - if: $CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+.*/ - if: $CI_COMMIT_REF_NAME == "main"
执行效果 一个简单的框架都起来了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~