Gitlab CI CD - Docker 에서 host 의 aws 설정 사용하기

2023. 9. 18. 00:00DevOps/GitLab CI CD

반응형

IAM 계정 만들기

보안 자격 증명 선택
사용자 클릭
사용자 생성 클릭
액세스 키 만들기

aws cli 설치 및 설정

# 설치파일 다운로드
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# unzip 파일
unzip awscliv2.zip
# install
sudo ./aws/install

aws configure 설정

aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set region $AWS_DEFAULT_REGION
aws configure list

 

현재 user 에 설정된 aws 설정 폴더 및 파일을 gitlab-runner 에 copy

#gitlab-runner 에 copy
sudo cp -r ~/.aws /home/gitlab-runner/

#gitlab-runner 로 소유자 변경
sudo chown -R gitlab-runner /home/gitlab-runner/.aws

Dockerfile

# volume 연결을 위한 directory 추가
RUN mkdir /root/.aws 2>/dev/null || true &&\
    mkdir /usr/local/bin 2>/dev/null || true

 

aws share 하는 경우 .gitlab-ci.yml

variables:
  CONTAINER_NAME: $CONTAINER_NAME
  IMAGE_NAME: $IMAGE_NAME
  DB_CONNECTION_STRING: $DB_CONNECTION_STRING
  DB_CONNECTION: $DB_CONNECTION
  
before_script:
  - |
    echo "Stopping and removing container:" $CONTAINER_NAME 
    docker stop $CONTAINER_NAME 2> /dev/null || true
    docker rm $CONTAINER_NAME 2> /dev/null || true
    docker rmi $IMAGE_NAME 2> /dev/null || true
  - cd ApiServer
  - echo "Running efbundle..."
  - chmod +x efbundle.exe
  - ./efbundle.exe --connection $DB_CONNECTION_STRING
  - cd ../UnitTest
  - dotnet test -e ConnectionStrings__Server=$DB_CONNECTION_STRING
  - cd ..

stages:          # List of stages for jobs, and their order of execution
  - build

# 볼륨연결
docker_build:
  stage: build
  script:
    - echo "docker building the code..."
    - docker buildx build -t $IMAGE_NAME -f Dockerfile .
    - docker run 
      -e ConnectionStrings__Server=$DB_CONNECTION 
      -e Logging__LogLevel__Default="Warning" 
      -v ~/.aws:/root/.aws 
      -v /usr/local/bin:/usr/local/bin
      --name $CONTAINER_NAME -d --restart unless-stopped -p 5006:80 
      --network my_network $IMAGE_NAME
    - echo "docker build complete."

이제 이 pipeline 을 실행하면 code 상에서 aws 에 대한 모든 sdk 를 credential 을 따로 지정하지 않고 사용 가능하다

 

관련영상

https://youtu.be/GbkVlZXIVIs

 

반응형